2015-07-20 44 views
2

我有一个情况,大家好,我使用的这些包在Django的REST的API和身份验证:Django的智威汤逊生成的令牌,如果收到的电子邮件确认

  • django-rest-framework(REST API提供商)
  • django-allauth(用户认证)
  • django-rest-framework-jwt(支持JSON的Web令牌)

在Django-allauth,我做了强制性完成注册后,确认电子邮件(ACCOUNT_EMAIL_VERIFICATION = 'mandatory'),使用会话身份验证进行登录没有问题,并且遵循此选项,但jwt生成令牌并忽略此选项。

我该如何处理?

回答

3

最后我找到了答案。

我们需要重写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,因为我们需要保持这种动力。