如果电子邮件已确认,django jwt 会生成令牌
django jwt generate token if email confirmed
伙计们,我有一个情况,我在 django 中使用这些包进行休息-api 和身份验证:
django-rest-framework
(REST API 提供商)
django-allauth
(用户认证)
django-rest-framework-jwt
(支持JSON-Web-Token)
在 django-allauth 中,我强制要求在注册后确认电子邮件 (ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
),使用会话身份验证登录是可以的并遵循此选项,但 jwt 生成令牌并忽略此选项。
我该如何处理?
终于找到答案了
我们需要覆盖 ObtainJSONWebToken
class:
def post(self, request):
serializer = self.get_serializer(data=request.DATA)
if serializer.is_valid():
user = serializer.object.get('user') or request.user
# check if settings swith is on / then check validity
if settings.ACCOUNT_EMAIL_VERIFICATION == settings.ACCOUNT_EMAIL_VERIFICATION_MANDATORY:
email_address = user.emailaddress_set.get(email=user.email)
if not email_address.verified:
return Response(status=403, data='E-mail is not verified.')
token = serializer.object.get('token')
response_data = jwt_response_payload_handler(token, user, request)
return Response(response_data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
注意:请记住,使用设置开关ACCOUNT_EMAIL_VERIFICATION
检查电子邮件有效性,因为我们需要保持此动态。
伙计们,我有一个情况,我在 django 中使用这些包进行休息-api 和身份验证:
django-rest-framework
(REST API 提供商)django-allauth
(用户认证)django-rest-framework-jwt
(支持JSON-Web-Token)
在 django-allauth 中,我强制要求在注册后确认电子邮件 (ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
),使用会话身份验证登录是可以的并遵循此选项,但 jwt 生成令牌并忽略此选项。
我该如何处理?
终于找到答案了
我们需要覆盖 ObtainJSONWebToken
class:
def post(self, request):
serializer = self.get_serializer(data=request.DATA)
if serializer.is_valid():
user = serializer.object.get('user') or request.user
# check if settings swith is on / then check validity
if settings.ACCOUNT_EMAIL_VERIFICATION == settings.ACCOUNT_EMAIL_VERIFICATION_MANDATORY:
email_address = user.emailaddress_set.get(email=user.email)
if not email_address.verified:
return Response(status=403, data='E-mail is not verified.')
token = serializer.object.get('token')
response_data = jwt_response_payload_handler(token, user, request)
return Response(response_data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
注意:请记住,使用设置开关ACCOUNT_EMAIL_VERIFICATION
检查电子邮件有效性,因为我们需要保持此动态。