#python #django #web #jwt #backend
Вопрос:
Я пытаюсь настроить этот API с аутентификацией пользователя, но при попытке входа в систему я продолжаю получать сообщение об ошибке в заголовке. Регистрация, похоже, работает, и суперпользователь может войти в систему. Я полагаю, что это связано с хэшированием пароля, потому что, когда я захожу в панель администратора, у каждого пользователя появляется одно и то же сообщение: «Неверный формат пароля или неизвестный алгоритм хэширования». кроме суперпользователя (которого я создал в терминале). Я допустил ошибку в части создания пользователя?
Serializers.py
from rest_framework import serializers
from rest_framework.permissions import IsAuthenticated
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.contrib.auth.hashers import make_password
class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
Views.py
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework import generics, permissions, mixins
from django.contrib.auth.models import User
from .serializers import RegisterSerializer
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"message": "User created successfully!"
})
Settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
'rest_framework_simplejwt',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication'
]
}
РЕДАКТИРОВАТЬ: Я много раз трижды проверял данные для входа, проблема в том, что на 100% я НЕ ввел неправильное имя пользователя/пароль.