2014-08-28 68 views
4

我使用Python社交身份验证为我们的应用程序,我最近创建了一个双范围的谷歌登录。这个想法是允许用户使用谷歌登录,但然后升级范围,让我们阅读他们的电子邮件,并解析他们的相关内容。我也跟着在文档中列出的建议:http://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-provider,创造了新的后端:Python社交身份验证多个范围额外的数据

from social.backends.google import GoogleOAuth2 
class GoogleEmailOAuth2(GoogleOAuth2): 
    name = 'google-email' 

,然后添加必要的部分,以我们的settings.py(和所有必要的网址):

SOCIAL_AUTH_GOOGLE_EMAIL_SCOPE = ['email', 'profile', 'https://www.googleapis.com/auth/plus.profile.emails.read'] 
SOCIAL_AUTH_GOOGLE_EMAIL_AUTH_EXTRA_ARGUMENTS = {'access_type': 'offline'} 
SOCIAL_AUTH_GOOGLE_EMAIL_EXTRA_DATA = [ 
    ('id', 'user_id'), 
    ('email', 'user_email'), 
    ('refresh_token', 'refresh_token', True), 
    ('expires_in', 'expires'), 
    ('token_type', 'token_type', True) 
] 

和一切似乎工作,除了创建的UserSocialAuth对象不包含extra_data中的任何东西...我用正常的SOCIAL_AUTH_GOOGLE_OAUTH2_EXTRA_DATA使用相同的作用域,它的工作原理完美,但对于自定义后端仍然是nada。非常感谢您提出任何建议。

编辑:尝试了几种不同的方法,但仍然无法设置数据。

回答

0

我没有同样的问题,所以不能回答这个问题,而是一个建议是把一个调试断点在load_extra_data管道功能,并按照它从那里:

def load_extra_data(backend, details, response, uid, user, *args, **kwargs): 
    # 
    # <-- Add your debugger of choice, e.g. 
    # import pdb; pdb.set_trace() 
    # 
    social = kwargs.get('social') or \ 
      backend.strategy.storage.user.get_social_auth(backend.name, uid) 
    if social: 
     extra_data = backend.extra_data(user, uid, response, details, 
             *args, **kwargs) 
     social.set_extra_data(extra_data) 

https://github.com/omab/python-social-auth/blob/v0.2.13/social/pipeline/social_auth.py#L82-L88

+2

尽管此链接可能回答此问题,但最好在此处包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/13631447) – jwpfox 2016-09-10 09:08:46

+0

谢谢@jwpfox,相应更新。 – pzrq 2016-09-14 12:04:47