Почему 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.

Вернуться на верх