如何以编程方式刷新googleoauth2令牌

2024-04-19 18:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Django与python-social-auth一起使用googleoauth2对我的用户进行身份验证,并使用Youtube API。在

我想实现的是要求他们只需登录并授权一次,并且能够根据我的需要使用他们的凭证。这是不可能的,因为大约一个小时后,他们将过期,我需要用户重新授权我的应用程序,以获得新的凭据。在

我假设解决方案是定期刷新凭据,但我找不到任何可靠的指南来指导如何执行此操作。在

我当前的配置是:

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'the_key'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'the_secret'
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ["https://www.googleapis.com/auth/youtube.readonly", "https://www.googleapis.com/auth/yt-analytics.readonly"]
SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
   'access_type': 'offline',
   'approval_prompt': 'force'
}

此外,授权用户还具有以下附加功能:

^{pr2}$

我尝试用下面的代码刷新它,但由于它仍然过期,我认为这不是正确的方法:

social_user = UserSocialAuth.objects.get(...)  # Fetch the instance
social_user.refresh_token(load_strategy())  # Returns "None"

Tags: thedjango用户httpscomauthwwwgoogle
1条回答
网友
1楼 · 发布于 2024-04-19 18:32:40

经过更多的测试后,我发现使用refresh_token确实可以刷新它一个小时的使用时间,所以我需要做的是让一个cron作业运行Django命令在过期之前刷新它们,如下所示:

# app/management/commands/refresh_token_youtube.py    

from django.core.management.base import BaseCommand
from social.apps.django_app.me.models import UserSocialAuth
from social.apps.django_app.utils import load_strategy


class Command(BaseCommand):
    def handle(self, *args, **options):
        for social_user in UserSocialAuth.objects.filter(provider='google-oauth2'):
            social_user.refresh_token(load_strategy())

# crontab to run it every 30th minute

*/30 * * * * /path_to/env/bin/python /path_to/refresh_token_youtube.py

不过,我真正想要的是能够像其他社交网络(Instagram、Twitter、Facebook)一样,按需更新代币,只需一次登录,证书永不过期。在

相关问题 更多 >