我正在使用内置用户模型和 knox 令牌身份验证在 Django 中构建用户身份验证。通过邮递员,我可以创建一个新用户,该用户正确返回该用户的用户名和唯一令牌。但是,当我尝试使用正确的用户名和密码信息访问我的登录路径时,它会返回 400 Bad Request 以及我的验证错误消息“凭据不正确”。知道为什么会发生这种情况吗?
下面是我的登录序列化程序、api 和 url 路径。
# Login Serializer in serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
class LoginSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
raise serializers.ValidationError('Incorrect Credentials')
# Login API in api.py
from rest_framework import generics
from rest_framework.response import Response
from knox.models import AuthToken
from .serializers import LoginSerializer
class LoginAPI(generics.GenericAPIView):
serializer_class = LoginSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
from django.urls import path, include
from .api import RegisterAPI, LoginAPI, UserAPI
from knox import views as knox_views
urlpatterns = {
path('auth', include('knox.urls')),
path('auth/register', RegisterAPI.as_view()),
path('auth/login', LoginAPI.as_view()),
path('auth/user', UserAPI.as_view()),
path('auth/logout', knox_views.LogoutView.as_view(), name='knox_logout'),
}
我会注意到,include('knox.urls')
如果发生任何类似的路径名问题并且仍然收到相同的问题,我会尝试将该部分移动到我的 url 路径的底部。