我成功地使用Django(1.6.4)以及allauth(0.16.1)和Python(2.7)通过Google和Facebook进行登录,并在不存在使用提供程序检索到的电子邮件地址的现有用户的情况下,按预期重定向到settings.LOGIN_REDIRECT_URL。然而,当已存在与从提供者(fb或google)检索到的相同的电子邮件地址的用户时,它总是重定向到/accounts/social/signup/#=注册页面,并询问:
您即将使用您的Facebook/Google账户登录example.com。请完成以下表格作为最后一步: 电子邮件已自动填充。
我尝试了SOCIALACCOUNT_AUTO_SIGNUP = True或False,但没有效果。我尝试更改Facebook的auth_type,但我没有看到除“rerequest”之外的任何选项。
我有以下settings.py设置:
ACCOUNT_AUTHENTICATION_METHOD = "email" # Defaults to username_email
ACCOUNT_USERNAME_REQUIRED = False # Defaults to True
ACCOUNT_EMAIL_REQUIRED = True # Defaults to False
SOCIALACCOUNT_QUERY_EMAIL = ACCOUNT_EMAIL_REQUIRED
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_ADAPTER = "myproject.adapter.MyLoginAccountAdapter"
LOGIN_URL = "/"
LOGIN_REDIRECT_URL = "/users/{id}/mytags"
我该如何停止这个重定向到注册页面,使提供者登录重定向到已经存在具有相同电子邮件ID的用户的LOGIN_REDIRECT_URL?注意:我已经尝试了以下方法:
- 我已经更新了我的项目适配器MyLoginAccountAdapter中的get_login_redirect_url。只对谷歌有效,但不能像Django allauth - set facebook redirect所述那样适用于Facebook。 - 我尝试过"Bypass signup form using allauth"但无效。
更新:
- 感谢这个答案,我意识到通过Facebook登录将在以下情况下重定向到注册页面:当从Facebook个人资料检索到的电子邮件与已经存在的用户的电子邮件ID匹配时。 - 我更新了问题以解决上述情况。 - 总结一下问题,这是一个多个提供者帐户具有相同电子邮件ID的情况,django-allauth不允许交替登录(例如,如果我使用Facebook注册过一次,则django-allauth将要求我仅使用Facebook而不是与相同电子邮件ID的任何其他提供者)。 - 我通过使用
@receiver(pre_social_login)
和raise ImmediateHttpResponse
(请查看我的答案)解决了这个问题,并附有有用的链接:this和thisone。谢谢, Amit
SOCIALACCOUNT_EMAIL_AUTHENTICATION = True
吗?参见社交账户配置。 - undefined