许可.AllowAny不在knoxLoginView中工作



我尝试使用knoxLoginView进行令牌身份验证登录,knox文档中指出,为了使loginView正常工作,并且不会引发401未经授权的错误,我必须添加权限类"AllowAny";或者使用BasicAuthentication覆盖身份验证类。我尝试了两者都不起作用,登录视图仍然抛出401未经授权的错误。令人惊讶的是,我在youtube上看到了一个家伙使用权限的教程。AllowAny和它起作用了,不知道为什么它对我不起作用。这是登录视图代码:

class LoginAPI(KnoxLoginView):
permission_classes = (permissions.AllowAny,)

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(LoginAPI, self).post(request, format=None)

settings.py:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'knox',
'corsheaders',
'users',

]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
#'rest_framework.authentication.BasicAuthentication' ,
'knox.auth.TokenAuthentication',

]
}

对于同样面临这个问题并且整个stackoverflow都没有试图提供帮助的人,如果你的url文件中有这个:

path('path_url/', include('knox.urls')),

删除它,因为它以某种方式拒绝权限并坚持授权,这就是为什么只有当您将身份验证更改为BasicAuthentication时,它才会起作用,这可能是knox身份验证错误。

最新更新