繁体   English   中英

如何使用 python-social-auth 和 django-graphql-auth 返回刷新令牌?

[英]How can I return the refresh token using python-social-auth and django-graphql-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']
        )

当我注释掉刷新令牌时,用户和令牌字段没问题。 我只是不知道从哪里获得刷新令牌,它似乎不在extra_data中。

我已经处理这个问题几个小时了,所有的搜索结果都没有帮助。 请,非常感谢任何指导。

扩展SocialAuthJWT时不需要再次声明 token 字段,因为它已经具有来自JSONWebTokenMixin mixin 的token字段,除非您需要用不同的类型覆盖它。

至于刷新令牌,您可以执行以下操作来获取它:

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
        )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM