python - 如果电子邮件已确认,django jwt 会生成 token

标签 python django django-rest-framework django-allauth

伙计们,我有一个情况,我在 django 中使用这些包来进行 rest-api 和身份验证:

  • django-rest-framework(REST API 提供者)
  • django-allauth(用户认证)
  • django-rest-framework-jwt(支持 JSON-Web-Token)

在 django-allauth 中,我强制要求在注册后确认电子邮件 (ACCOUNT_EMAIL_VERIFICATION = 'mandatory'),使用 session 身份验证登录是可以的并遵循此选项,但 jwt 生成 token 并忽略这个选项。

我该如何处理?

最佳答案

终于找到了答案。

我们需要覆盖ObtainJSONWebToken类:

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 检查电子邮件有效性,因为我们需要保持此动态。

关于python - 如果电子邮件已确认,django jwt 会生成 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515516/

相关文章:

database - 南迁报错: NoMigrations exception for django. contrib.auth

python - 处理 Django 单元测试用例中的可选 url 参数

django - 在 Django 中使用 ModelChoiceField 进行搜索

python - GeoDjango:查找半径内的对象

python - 通过模型 Django 在嵌套序列化器中包含额外的字段

python - LXML 是否有可能检测到一个类在 HTML 中具有什么值?

python - 键盘在 PyCharm IDE 中不工作,光标不出现在任何地方

python - 如何将 django-rest-swagger 2.0 与现有 DRF 应用程序集成(初学者)

Django rest swagger 嵌套序列化程序在示例 UI 中显示数组列表

python - 按相对于给定位置的距离排序查询集