我正在检查用户密码以提供用户信息。但是当我输入正确密码时,它将引发密码错误信息。
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',
)
答案 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',
)