Как вернуть токен обновления, используя 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
)