我可以两次使用JWTAuthentication进行登录身份验证吗?

时间:2020-04-15 06:06:44

标签: django python-3.x django-rest-framework jwt django-rest-framework-jwt

在登录名中,我想发送OTP,第二名要验证OTP,然后返回令牌。

我正在使用rest_framework_simplejwt JWTAuthentication。第一名是验证用户并发送OTP,而不返回令牌;第二名是验证OTP,并返回令牌。

让我知道这是否是正确的使用方式?如果没有,我该如何使用JWTAuthentication来实现这一点。

或者如果使用的方法不正确,是否可以像第一位使用基本身份验证来验证用户,第二位 jwt身份验证来验证OTP和发送令牌。让我知道您的解决方案。

1 个答案:

答案 0 :(得分:0)

我了解什么?

您需要先向正在使用send_otp路由的当前用户发送OTP,然后再检查该用户是否在系统中,然后再进行verify_otp路由,这将验证用户已在API中发送的OTP及其对应的mobile_number / email_id。

如何做到?

  • send_otp -保持此路由开放,您不需要为此进行身份验证,甚至不需要基本身份验证(在行业中也是如此),只需从用户处获取mobile_number在请求中,检查数据库中是否存在该OTP,然后将OTP发送给该号码,然后将OTP设置为您的缓存中的相应用户,以进行重新检查(redis / memcache)。在此路由上使用限制,以便没有人能够利用您的此API。

  • verify_otp -此路由也将打开(无authentication_class / permission_classes),从用户那里获取mobile_number / email id + OTP,在缓存中进行验证,如果通过验证,则生成使用 TokenObtainPairSerializer 令牌并在响应中发送刷新+访问令牌,如果OTP错误,则发送401。