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

Python Social Auth: Not change info for existant user when associating account

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

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

谢谢!

我最后所做的是为管道创建一个新函数,该函数调用时间轴中默认的现有 populate_info,但前提是它是一个新帐户(由 [=17= 确定) ] 在 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',
)