Почему django не распознает мой токен после перенаправления из браузера?
В моем фронтенде я вхожу в api приложения через браузер, затем меня перенаправляют обратно в представление в моем бэкенде, которое получает код из api приложения, отправляет его обратно в пост-запросе, затем получает токен доступа и сохраняет его в модели, связанной с текущим пользователем. Я использую маркерный аутентификатор.
Вид:
class APICallback(APIView):
authentication_class = [authentication.TokenAuthentication]
permission_class = [permissions.IsAuthenticated]
def api_callback(request, format=None):
code = request.GET.get('code')
if not code:
return Response({'Error': 'Code not found in request'}, status=status.HTTP_400_BAD_REQUEST)
response = post('https://accounts.api.com/api/token', data={
'code': code,
}).json()
print(response)
user = request.user
access_token = response.get('access_token')
token = APITokenModel(user=user, access_token=access_token)
token.save()
return redirect('frontend')
У меня есть другие представления, которые делают запросы, и они смогли получить токен, чтобы узнать, кто является пользователем, но когда вызывается это представление, я получаю ошибку 401 Unauthorized.
Как сообщить Django, что токен, который я получаю от api другого приложения, принадлежит текущему пользователю?
также... когда я убираю разрешения и класс аутентификации из View, он возвращает пользователя как Anonymous User
Во-первых, какой класс аутентификации вы используете? Вы должны знать, что ваш класс TokenAuthentication использует заголовок Authorization в запросе для вашей аутентификации. Если он не был передан, то вам следует исправить это.
Следует знать, что вы не отправляете auth-токены как GET и не должны отправлять их как таковые. Если, конечно, вы не хотите написать собственный класс Authentication.