【问题标题】:python social auth duplicate entrypython社交身份验证重复条目
【发布时间】:2014-02-17 21:34:38
【问题描述】:

我将 python-social-auth 与 django 一起使用。 我想通过 facebook 进行授权,但在此之前,我已经以默认方式(电子邮件、密码)注册了 facebook 使用的电子邮件。 我可以将 facebook 帐户与注册帐户相关联吗? 我试图搜索,但什么也没有

【问题讨论】:

    标签: django python-social-auth


    【解决方案1】:

    检查Associate users by email,应该解释如何做到这一点。

    通过电子邮件关联用户

    如果电子邮件已经与用户帐户匹配,则有时希望自动关联社交帐户。

    例如,如果用户使用他的 Facebook 帐户注册,然后退出并下次尝试使用 Google OAuth2 登录,那么用户获得的可能会很好(如果两个社交网站都配置了相同的电子邮件地址)进入他由 Facebook 后端创建的初始帐户。

    这种情况可以通过启用 associate_by_email 管道功能实现,如下所示:

    SOCIAL_AUTH_PIPELINE = (
        'social_core.pipeline.social_auth.social_details',
        'social_core.pipeline.social_auth.social_uid',
        'social_core.pipeline.social_auth.auth_allowed',
        'social_core.pipeline.social_auth.social_user',
        'social_core.pipeline.user.get_username',
        'social_core.pipeline.social_auth.associate_by_email',  # <--- enable this one
        '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',
    )
    

    默认情况下禁用此功能,因为使用所有后端自动执行此过程并非 100% 安全。并非所有提供商都会验证您的电子邮件帐户,其他用户可以利用这一点。

    以使用电子邮件 foo@bar.com 在您的站点中注册的用户 A 为例。然后,恶意用户注册到另一个未使用同一帐户验证其电子邮件的提供商。最后,该用户将转到您的网站(该网站支持该提供商)并注册,因为电子邮件相同,恶意用户将控制用户 A 帐户。

    编辑:将已修复和复制的文档详细信息链接到此答案中。

    【讨论】:

    • 您需要登录对吗?否则它会创建一个新帐户,您最终会得到重复的电子邮件地址,这将引发异常。
    • @ValNeekman,不,通过电子邮件关联仅适用于已注销的用户。当给定电子邮件已被多个帐户使用时会引发异常,因为 PSA 不知道要关联哪一个帐户。
    • 你确定吗?,我查看了 associate_by_email 的代码,它对零电子邮件返回 None,对多于一封电子邮件引发 AuthException,如果恰好找到一封电子邮件,则返回用户。在我的例子中,我用谷歌注册,注销,然后用我的 gmail 账户注册 facebook,然后繁荣,我用相同的电子邮件地址创建了第二个账户。我正在捕获 AuthException,但在我的情况下没有引发。用户登录后,一切正常,但如果未登录,我想避免在我的数据库中重复电子邮件条目。thx
    • 您的管道设置是如何定义的? associate_by_email 对登录用户不起作用(主要是因为合并用户帐户与项目高度相关),如果没有注册该电子邮件的帐户,则不会返回用户,如果超过 1 个用户将引发异常帐户共享相同的电子邮件地址(因为不选择哪个,第一个?第二个?第三个?)。
    • 虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。该网站现在已经消失了,所以这个答案和空的一样好:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多