Проблемы с аутентификацией пользователей в Python
Я создаю приложение django/react и испытываю проблемы с аутентификацией пользователей бэкэнда, не смог отладить проблему.
После успешного создания учетной записи я пытаюсь войти в систему. Вот маршрут входа, который я построил.
@csrf_exempt
@api_view(['POST'])
def loginUser(request):
data = request.data
if request.method == 'POST':
email = data['email']
password = data['password']
try:
user = User.objects.get(email=email)
except:
message = {'detail': 'email does not match a user'}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
username = user.username
user = authenticate(request, username=username, password=password)
# Returning correct username and password
print('This is the username:', username)
print('This is the password:', password)
# returning None, even though username and password are matching the info used for signup. (confirmed on admin page)
print('This is the user:', user)
if user is not None:
login(request, user)
serializer = UserSerializer(user, many=False)
message = {'detail': 'user has been logged in'}
return Response(serializer.data)
else:
message = {'detail': 'Username or password is incorrect'}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
Любая помощь будет очень признательна, так как я застрял на этом уже 2 дня.
Возможно, это связано с Try-Except или с тем, что вы используете email вместо имени пользователя (но я не думаю, что это имеет значение). Вы можете попробовать что-то вроде этого:
from django.contrib.auth import authenticate
from django.contrib.auth.models import auth
def loginUser(request):
if request.method == 'POST':
username = request.POST['name']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('index')
else:
messages.info(request, 'Invalid Username or Password')
return redirect('login')
else:
return render(request, 'login.html')
Надеюсь, это поможет.
Если вы используете этот код, а проблема все еще сохраняется, это может быть связано с тем, что ваш шаблон или урлы могут быть неправильными.