即使输入正确的密码,checking_password也会返回false

时间:2020-09-07 09:53:06

标签: django django-models django-rest-framework

我正在检查用户密码以提供用户信息。但是当我输入正确密码时,它将引发密码错误信息。

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    # username = None
    email = models.EmailField(verbose_name='email',max_length=50,unique=True)

    phone =  models.CharField(max_length=17,blank=True)
    

    REQUIRED_FIELDS = [
        'first_name',
        'last_name',
        'phone',
        'username',
    ]

    USERNAME_FIELD = 'email'

    def get_username(self):
        return self.email

views.py

from rest_framework.authtoken.models import Token
from django.contrib.auth.hashers import check_password,make_password

## My Login View
class LoginView(APIView):
    
    serializer_class = CustomTokenCreateSerializer
    permission_classes = (AllowAny,)
    

    def post(self,request,*args, **kwargs):
        # Cheking email Exists
        if User.objects.filter(email=request.POST['email']).exists():
            user = User.objects.get(email=request.POST['email'])

            ## check password matches
            if check_password(request.POST['password'],user.password):
                ## Creating TOken
                token, _ = Token.objects.get_or_create(user=user)

                serializer = UserCreateSerializerCustom(user)
                return Response({'status':True,
                                "message":"Login SuccessFull",
                                "user_info":serializer.data,
                                'token':token.key})
            else:
                return Response({'status':False,
                                "message":"Passord is not correct,Check Passsword again"})
        else:
            return Response({'status':False,
                                "message":"User Doesn't Exist,Check Email again"}
                                )
        

这是我项目的登录api。我正在使用check_password函数检查密码,我找不到解决此问题的方法。

我可以使用管理员用户名和密码登录,没有任何错误。但是无法使用用户数据登录。我认为问题是用户的密码没有以正确的方式进行哈希处理,我该怎么做... ??

修改 注册视图

#### User registration View
class UserRegistrationView(generics.CreateAPIView):
    serializer_class = UserCreateSerializerCustom
    # queryset = User.objects.all()
    permission_classes = (AllowAny,)

    def post(self,request,format=None):
        serializer = UserCreateSerializerCustom(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({"Status":True,"message":"User Registered Successfully",
                    "User_info":serializer.data},
                    status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

serializer.py

from djoser.serializers import UserCreateSerializer

class UserCreateSerializerCustom(UserCreateSerializer):
    
    class Meta(UserCreateSerializer.Meta):
        model = User
        fields = (
            'id',
            'email',
            'username',
            'first_name',
            'last_name',
            'phone',         
        )

1 个答案:

答案 0 :(得分:0)

问题不是在字段中添加密码

from djoser.serializers import UserCreateSerializer

class UserCreateSerializerCustom(UserCreateSerializer):

    class Meta(UserCreateSerializer.Meta):

        model = User
        fields = (
            'id',
            'email',
            'username',
            'first_name',
            'last_name',
            'password',
            'phone',         
        )