У меня проблема с аутентификацией сгенерированного Django REST API.Передний конец отделен от бэкэнда.внешний интерфейс работает на сервере с портом 8008, а внутренний - на Django 8000. Проблема в том, что я добавил параметры CORS в файл setting.py, и у меня проблема в том, что API работает нормально, за исключением случаев, когда я хочу получить доступ к данным, требующим аутентификации.Это представление класса аутентификации:
class LoginView(APIView):
permission_classes = (AllowAny,)
def get(self, request, format=None):
print('executed scc!!!')
content = {
'status': 'request was permitted'
}
return Response(content)
def post(self, request):
print('Loging in !!!')
serializer = LoginSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data["user"]
django_login(request, user)
print(request.user)
token, created = Token.objects.get_or_create(user=user)
return Response({"token": token.key}, status=200)
Я думаю, что представление класса является правильным.И все работает нормально после отправки учетных данных пользователя скинуть пост-запрос.Моя проблема в том, что у меня есть другое представление класса, которое требует аутентификации пользователя.поэтому, когда я использую почтальон, он работает нормально, я получаю доступ к request.user и возвращает зарегистрированного пользователя.Но в коде, который я получаю, аргумент должен быть строкой, байтовоподобным объектом или числом, а не «AnonymousUser».
Нужно ли добавлять заголовки в мои HTTP-запросы?потому что я заметил, что почтальон использует куки
INSTALLED_APPS = [
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
}
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'localhost:8008',
)
CORS_ORIGIN_REGEX_WHITELIST = (
'localhost:8008',
)