【发布时间】:2021-06-23 05:20:00
【问题描述】:
我目前正在尝试在我的 Django 应用程序中实现 2FA。我做的第一件事是修改UserSerializer类中的Meta类,添加两个字段enabled(表示是否为用户启用了2FA)和secret_key(生成OTP的关键,即在用户启用 2FA 时共享给用户)。
为了最小化修改登录流程,我修改了发送的表单以生成访问令牌,以包含一个新字段“otp”。用户可以填写与否,后端会检查用户是否开启了2FA,如果开启了OTP是否正确。
如果没有 2FA,登录只是一个带有正文 {"username": usr, "password": pwd} 的 POST 请求。这已成为带有正文 {"username": usr, "password": pwd, "otp": otp} 的 POST 请求。如果用户用户尚未启用 2FA,他只需将 opt 字段留空即可。
我的urls.py 看起来像这样:
path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair")
我的想法是重写 TokenObtainPairView 以适应新的请求。根据我的发现,我必须更改 validate 方法,但我真的不知道如何做到这一点。我可能必须获取用户的 enabled 和 secret_key 字段的值(基于用户名)以生成 OTP(如果相关)并对照 otp 字段进行检查。问题是,我不知道该怎么做,而且我在 simple-jwt 实现中有点迷失了。
【问题讨论】:
标签: python django django-rest-framework jwt