gpt4 book ai didi

python - 如何实现django otp?

转载 作者:太空狗 更新时间:2023-10-29 21:58:12 24 4
gpt4 key购买 nike

我在看 django-otp模块并想在我的项目中实现它。但我面临着几个问题。

1) 根据文档(他们在文档中给出的方法),身份验证分为三个级别:AnonymousAuthenticatedAuthenticated + Verified。如果用户已经通过 django 的身份验证系统进行了身份验证,那么他将被要求进行 otp 验证(双向身份验证)。

现在我想跳过它并仅通过 otp 验证/验证用户。而不是登录提示用户将输入一个电话号码并将收到一个 otp 进行验证。(我想绕过 django 的身份验证)。

2) 我也想用 otp_required仅在选定的页面上。即我的网站上会有匿名用户和经过验证的用户。

3) 我找不到任何关于实现的例子。

我的问题是如何在我当前的场景中实现它。

编辑:设置.py

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home',
'django_otp',
'django_otp.plugins.otp_totp',
'django_otp.plugins.otp_static',
]

MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_otp.middleware.OTPMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

最佳答案

您可以编写自己的基于类的 View 混入,类似于 LoginRequired mixin .

class AuthenticationVerificationMixin(AccessMixin):
"""
CBV mixin which verifies that the current user is authenticated,
and has a placeholder for checking if user verified.
"""
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return self.handle_no_permission()
elif not request.user.is_verified():
# If you need a verification logic it will go here,
# for example here's a redirect if you're not verified...
# return redirect_to_login(self.request.get_full_path(), '/verify/'), self.get_redirect_field_name())
return super().dispatch(request, *args, **kwargs)

然后将这些混合添加到您的 View 中,例如

class MyView(AuthenticationVerificationMixin, TemplateView):
...

关于python - 如何实现django otp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36564973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com