Проверка аутентификации django check.password не работает
check.password не работает и вот сообщение об ошибке :
packages\django\contrib\auth\base_user.py", строка 115, in check_password return check_password(raw_password, self.password, setter) Файл "C:\Python310\lib\site-
packages\django\contrib\auth\hashers.py", строка 55, in check_password must_update = hasher_changed или preferred.must_update(encoded) Файл "C:\Python310\lib\site-
packages\django\contrib\auth\hashers.py", строка 332, in must_update decoded = self.decode(encoded) Файл "C:\Python310\lib\site-
packages\django\contrib\auth\hashers.py", строка 308, in decode алгоритм, итерации, соль, хэш = encoded.split("$", 3) ValueError: недостаточно значений для распаковки (ожидалось 4, получено 3)
вот виды:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.exceptions import AuthenticationFailed
from .serializers import UserSerializer
from .models import User
class RegisterView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
class LoginView(APIView):
def post(self, request):
email = request.data['email']
password = request.data['password']
user = User.objects.filter(email=email).first()
if user is None:
raise AuthenticationFailed('user not found')
if not user.check_password(password):
raise AuthenticationFailed('incorrect password !')
return Response({
'message':'succes'})
сериализаторы :
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields =['id','name','email','password']
extra_kwargs = {
'password':{'write_only':True}
}
def create(self, validated_data):
password = validated_data.pop('password',None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
модели :
import email
from unicodedata import name
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here
class User(AbstractUser):
name = models.CharField(max_length=50)
email = models.CharField(max_length=50 , unique=True)
password = models.CharField(max_length=30)
username = None
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []