微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尽管我在 django rest-frame work 中发送了由视图生成的正确令牌,但令牌验证失败

如何解决尽管我在 django rest-frame work 中发送了由视图生成的正确令牌,但令牌验证失败

以前它运行良好,可以验证我的令牌,但是,我不知道发生了什么,它总是将我返回为无效的令牌。

使用 /register 并发送电子邮件以使用这些代码进行验证。

view.py

class RegisterView(generics.GenericAPIView) :
    serializer_class = RegisterSerializer
    renderer_classes = (UserRenderer,)

    def post(self,request) :
        user = request.data
        serializer = self.serializer_class(data=user)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        user_data = serializer.data
        user = User.objects.get(email=user_data['email'])
        token = RefreshToken.for_user(user).access_token
        current_site = get_current_site(request).domain
        relativeLink = reverse('email-verify')
        absurl = 'http://' + current_site + relativeLink + "?token=" + str(token)
        email_body = 'Hi ' + user.username + \
                     ' Use the link below to verify your email \n' + absurl
        data = {
            'email_body' : email_body,'to_email' : user.email,'email_subject' : 'Verify your email'
            }

        Util.send_email(data)
        return Response(user_data,status=status.HTTP_201_CREATED)

serializers.py

class RegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(
        max_length=68,min_length=6,write_only=True)

    default_error_messages = {
        'username': 'The username should only contain alphanumeric characters'}

    class Meta:
        model = User
        fields = ['email','username','password']

    def validate(self,attrs):
        email = attrs.get('email','')
        username = attrs.get('username','')

        if not username.isalnum():
            raise serializers.ValidationError(
                self.default_error_messages)
        return attrs

    def create(self,validated_data):
        return User.objects.create_user(**validated_data)

urls.py

path('register/',RegisterView.as_view(),name="register"),

utils.py

from django.core.mail import EmailMessage


import threading


class EmailThread(threading.Thread):

    def __init__(self,email):
        self.email = email
        threading.Thread.__init__(self)

    def run(self):
        self.email.send()


class Util:
    @staticmethod
    def send_email(data):
        email = EmailMessage(
            subject=data['email_subject'],body=data['email_body'],to=[data['to_email']])
        EmailThread(email).start()

现在我想通过向它提供令牌来验证使用 /email-verify 发送到电子邮件的令牌。

下面是代码

view.py

class VerifyEmail(views.APIView):
    serializer_class = EmailVerificationSerializer

    token_param_config = openapi.Parameter(
        'token',in_=openapi.IN_QUERY,description='Description',type=openapi.TYPE_STRING)

    @swagger_auto_schema(manual_parameters=[token_param_config])
    def get(self,request):
        token = request.GET.get('token')
        try:
            payload = jwt.decode(token,settings.SECRET_KEY)
            user = User.objects.get(id=payload['user_id'])
            if not user.is_verified :
                user.is_verified = True
                user.save()
            return Response({
                                'email' : 'Successfully activated'
                                },status=status.HTTP_200_OK)
        except jwt.ExpiredSignatureError as identifier :
            return Response({
                                'error' : 'Activation Expired'
                                },status=status.HTTP_400_BAD_REQUEST)
        except jwt.exceptions.DecodeError as identifier :
            return Response({
                                'error' : 'Invalid token'
                                },status=status.HTTP_400_BAD_REQUEST)

serializers.py

class EmailVerificationSerializer(serializers.ModelSerializer):
    token = serializers.CharField(max_length=555)
    class Meta:
        model = User
        fields = ['token']

urls.py

path('email-verify/',VerifyEmail.as_view(),name="email-verify"),

问题是,虽然我提供了发送到电子邮件的有效令牌 tp /verify-email,但它返回了一个无效令牌作为响应。为什么会发生。有人能看到代码中的任何问题吗?

以前它工作正常,我不知道代码发生了什么变化导致错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。