Python社交认证、Google和刷新令牌

2024-04-24 16:38:40 发布

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

在个人项目中,我尝试使用Django作为我的前端,然后允许用户以特定形式输入的数据复制到googlesheets。在

Google自己的文档推荐使用https://github.com/google/oauth2client,现在已经弃用了,而且文档还没有更新。通过这个,我开始尝试使用Python Social Auth和{a3}。为了使Gspread能够正常工作,我不仅需要传递一个访问令牌,而且还需要传递一个刷新令牌。然而,pythonsocial Auth没有将刷新令牌与其他“额外数据”一起持久化。看看保存的数据和路由到的url,在我看来更像是通过Google+路由的地方。在

我的Django设置文件中有以下配置:

AUTHENTICATION_BACKENDS = (
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'social_core.pipeline.social_auth.associate_by_email',
)    

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '...'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '...'
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = ['https://www.googleapis.com/auth/spreadsheets']
  • 有没有更好的方法来访问谷歌工作表?在
  • PSA或google将我重定向到google+auth流,而不是googleoauth2,我是对的吗?在
  • 如果没有,那么必须进行哪些更改才能使Python Social Auth保留刷新令牌?在

Tags: 数据django文档coreauthpipelinegooglesocial
2条回答

只需在您的settings.py中提供以下内容:

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = { 'access_type': 'offline', 'hd': 'stayabode.com', 'approval_prompt':'force' } 请记住,{'approval_prompt' : 'force'}将强制用户选择gmail帐户,这样您将获得刷新令牌。在

确实,python-social-auth将使用Google+平台的一些部分,至少是API来检索用户的详细信息来填写帐户。在

从您的设置中,我看到您在底部有associate_by_email,在这一点上,由于用户已经被创建,所以它没有任何用处,如果您真的打算使用它,它必须在create_user之前,您可以检查^{}作为参考。在

为了从google获得refresh_token,你需要告诉它你想要一个,为此你需要设置offline访问类型:

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
  'access_type': 'offline'
}

有了这个设置,Google将给您一个refresh_token,它将自动存储在extra_data中。在

相关问题 更多 >