Permission.AllowAny не работает в knoxLoginView
Я пытался использовать knoxLoginView для входа в систему с аутентификацией по токену, и в документации knox было сказано, что для того, чтобы loginView работал и не выдавал ошибку 401 unauthorized, я должен либо добавить класс разрешения "AllowAny", либо переопределить класс аутентификации с BasicAuthentication. Я попробовал оба варианта, ни один из них не сработал, представление входа по-прежнему выбрасывает ошибку 401 unauthorized. Удивительно то, что я видел учебник на youtube, где парень использовал permission.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 даже не пытается помочь, если у вас есть это в вашем файле urls:
path('path_url/', include('knox.urls')),
удалите его, потому что он почему-то отказывает в разрешениях и настаивает на предоставлении авторизации, поэтому он будет работать, только если вы измените аутентификацию на BasicAuthentication, возможно, это ошибка аутентификации knox.