Python社交身份验证:关联帐户时不会更改现有用户的信息

时间:2015-03-25 20:59:50

标签: python django django-socialauth python-social-auth

我的django应用程序正在使用Python Social Auth向Fb / G + / Twitter注册新用户,但我也希望用户能够将他们现有的帐户关联到Facebook / Google + / Twitter。 问题是每当我将新帐户连接到现有帐户时使用标准管道,它会将现有帐户的所有信息更改为我正在关联的社交帐户上的信息。 例如。: 如果我在我的网站上有一个帐户,电子邮件地址为abc@gmail.com,但我正在关联的Facebook帐户上的电子邮件是123@gmail.com,则会更改为该帐户。 我尝试从管道中删除'social.pipeline.user.user_details',但是当我创建新用户时,它不会将信息从Facebook提取到帐户,这是我想要的。

(如何)我能解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我最后做的是为管道创建一个新功能,调用默认情况下在时间轴中的现有populate_info,但前提是它是一个新帐户(由&#39确定) ; is_new' in kwargs):

from social.pipeline.user import user_details

def populate_info(strategy, details, user=None, *args, **kwargs):
    if (kwargs['is_new']):
        user_details(strategy, details, user, args, kwargs)
在settings.py上

SOCIAL_AUTH_PIPELINE = (

    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.user.get_username',
    'social.pipeline.social_auth.associate_by_email',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'myapp.auth_pipeline.populate_info',
)