Как вернуть токен обновления, используя python-social-auth и django-graphql-auth?

Как вернуть токен обновления при использовании social auth? Я пробовал это решение здесь Я не знаю, как сделать это совместимым с graphql.

Вот моя попытка:

import graphql_social_auth
from graphql_jwt.shortcuts import get_token


class SocialAuth(graphql_social_auth.SocialAuthJWT):
    refresh_token = graphene.String()
    token = graphene.String()

    @classmethod
    def resolve(cls, root, info, social, **kwargs):
        return cls(
            user=social.user,
            token=get_token(social.user),
            refresh_token=social.extra_data['refresh_token']
        )

Поля user и token в порядке, когда я закомментировал токен обновления. Я просто не знаю, где взять токен обновления, похоже, что он не находится в extra_data.

Я уже несколько часов занимаюсь этой проблемой, и все результаты поиска не помогают. Пожалуйста, любое руководство будет очень признательно.

Вам не нужно снова объявлять поле токена при расширении SocialAuthJWT, потому что оно уже имеет поле token из миксина JSONWebTokenMixin, если только вам не нужно переопределить его с другим типом.

Что касается маркера обновления, то для его получения вы можете сделать примерно следующее:

import graphql_social_auth
from graphql_jwt.shortcuts import get_token
from graphql_jwt.shortcuts import create_refresh_token


class SocialAuth(graphql_social_auth.SocialAuthJWT):
    refresh_token = graphene.String()

    @classmethod
    def resolve(cls, root, info, social, **kwargs):
        if social.user.refresh_tokens.count() >= 1:
            refresh_token = social.user.refresh_tokens.last()
        else:
            refresh_token = create_refresh_token(social.user)

        return cls(
            user=social.user,
            token=get_token(social.user),
            refresh_token=refresh_token
        )
Вернуться на верх