所以我在这里捎带这个帖子:
Python Social Auth duplicating e-mails for different users
这是我的问题:
我通过常规电子邮件注册,facebook auth或twitter auth为用户提供注册功能。
我也使用相同的包Social Django Auth App作为用户登录页面。
我意识到用户可能尝试使用Facebook帐户注册(与一封电子邮件相关联),然后再次尝试注册Twitter(可能具有相同的电子邮件地址)。基于上述帖子,我添加了一个函数来检查重复的电子邮件,如下所示:
def check_email_exists(request, backend, details, uid, user=None, *args, **kwargs):
email = details.get('email', '')
provider = backend.name
# check if social user exists to allow logging in (not sure if this is necessary)
social = backend.strategy.storage.user.get_social_auth(provider, uid)
# check if given email is in use
count = User.objects.filter(username=email).count()
success_message = messages.success(request, 'Sorry User With That Email Already Exists')
# user is not logged in, social profile with given uid doesn't exist
# and email is in use
if not user and not social and count:
return HttpResponseRedirect(reverse('accounts:sign_up', success_message))
和我的管道功能:</ p>
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',
'dealmazing.utils.check_email_exists',
'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',
)
UPON测试 - 如果我去注册已注册的电子邮件地址的Twitter帐户 - 它可以工作。 YAY!
但是当我尝试使用Facebook或Twitter登录时,主要问题就出现了。该功能正在检查这些登录,然后将我的电子邮件全部存在。&#39;电子邮件已存在...&#39;错误。
所以我需要在登录和注册之间进行解密,但是我无法通过社交认证包找到我的实际操作方法。
有什么想法吗?
答案 0 :(得分:0)
登录和注册之间的区别取决于您的项目,看起来在您的场景中,登陆管道功能的用户与数据库中的电子邮件匹配应该被视为login
尝试,而不是新单身。这基本上是associate_by_email
方法的功能。
当用户使用不验证电子邮件地址的服务时,您可能会发现潜在风险,他们可以控制其他人的帐户。您可以通过在添加任何新社交帐户后进行验证,或者通过信任已知可以验证电子邮件的服务来缓解此问题。
答案 1 :(得分:0)
我想说,你必须从管道中删除
'social_core.pipeline.social_auth.associate_by_email'
原因:您的应用程序不支持 User 数据模型中的唯一用户电子邮件,并且您将陷入困境。如果您不验证用户电子邮件,那么麻烦可能更大。