我正在使用django-rest-knox
用户身份验证并knox.auth.TokenAuthentication
作为唯一的身份验证类。另外,我通过扩展使用自定义用户模型AbstractBaseUser
。我有电子邮件和密码作为登录字段。
根据文档,当您使用令牌身份验证作为唯一的身份验证方法时,您必须覆盖 knox 的内置 LoginView。我遵循了相同的方法,但似乎没有成功。
视图.py
class LoginInterestedUserAPI(LoginView):
def get_user_serializer_class(self):
return LoginInterestedUserSerializer
def post(self, request, format=None):
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
login(request, user)
return super(LoginInterestedUserAPI, self).post(request, format=None)
序列化程序.py
class LoginInterestedUserSerializer(serializers.ModelSerializer):
class Meta:
model = InterestedUser
fields = ('email', 'password')
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
raise serializers.ValidationError("Unable to log in with the provided credentials")
网址.py
...
urlpatterns = [
path('login', views.LoginInterestedUserAPI.as_view()),
]
当我转到 url/api/login
时,我没有收到电子邮件和密码字段来输入我的凭据并获得以下输出:-
"detail": "Authentication credentials were not provided."