Django双因素身份验证,在特定视图上需要2FA

时间:2016-10-24 08:39:04

标签: python django two-factor-authentication

我正在我的网站上实现Django双因素身份验证,我希望有一些观点受到两个FA的保护,而另一些则不受。

为了做到这一点,我使用了装饰工具@otp_required,效果很好,但遗憾的是要求用户再次输入他们的凭证(为了处理用户会话,我使用注册模块)。

你是否能够给我一个很好的方法来破解表单,以便让用户输入令牌(基本上跳过表单的一步)?

非常感谢,

1 个答案:

答案 0 :(得分:1)

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

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

要执行此操作,请转到您的视图并插入以下代码:

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'),

就是这样!