我正在我的网站上实现 Django 双重身份验证,我希望一些 View 受双重 FA 保护,而另一些则不 protected 。

为此,我使用装饰器 @otp_required 效果很好,但不幸的是,它要求用户再次输入他们的凭据(为了处理用户 session ,我使用了注册模块)。

您能否给我一个好的方法来破解表单,以便只要求用户输入 token (基本上跳过表单的一个步骤)?

非常感谢,

最佳答案

对于那些关心的人,我找到了一种非常干净的方法。

诀窍是覆盖 two_factor_authentication 模块的 core.py 模块中的 LoginView 类。

为此,请转到您的 View 并插入以下代码:

class CustomLoginView(LoginView):

    form_list = (
        ('token', AuthenticationTokenForm),
        ('backup', BackupTokenForm),
    )

    def get_user(self):
        self.request.user.backend = 'django.contrib.auth.backends.ModelBackend'
        return self.request.user

基本上,我删除了 'auth' 步骤并覆盖方法 get_user() 以返回当前用户。
必须指定后端,否则 Django 会引发错误。

现在,要使用该类而不是 LoginView,请转到您的 url 并在包括 two_factor.urls 之前插入以下行。
url(r'^account/login/$', tradingviews.CustomLoginView.as_view(), name='login'),

就是这样!

关于python - Django 双因素身份验证,需要对特定 View 进行 2FA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40214027/

10-12 18:16
查看更多