How can I return the refresh token when using social auth? I tried this solution here I don't know how to make this compatible with graphql.
Here is my attempt:
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']
)
The user and token fields are alright when I comment out the refresh token. I just don't know where to get the refresh token, it seems to be not in the extra_data.
I am already dealing with this problem for hours and all the search results are no help. Please, any guidance is really appreciated.
CodePudding user response:
You don't need to declare the token field again when extending SocialAuthJWT
because it already has a token
field from the JSONWebTokenMixin
mixin unless you need to override it with a different type.
As for the refresh token, you can do something like this to get it:
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
)