在个人项目中,我尝试使用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']
只需在您的
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
访问类型:有了这个设置,Google将给您一个
refresh_token
,它将自动存储在extra_data
中。在相关问题 更多 >
编程相关推荐