最近,我遇到了一些不同寻常的事情。当我尝试通过Linked In注册我的django网站时,它立即登录我并将我重定向到我设置的登录重定向URL。但是现在当我在AWS上部署我的网站时,django-allauth将我带到这个用户注册页面,在注册之前询问用户名。我想跳过这个并使用电子邮件而不是“用户名”。以下是来自 settings.py 的我的django所有身份验证特定设置:
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "none"
ACCOUNT_LOGOUT_REDIRECT_URL = "/user/"
ACCOUNT_SIGNUP_PASSWORD_VERIFICATION = True
ACCOUNT_UNIQUE_EMAIL = True
此外,我还尝试设置SOCIALACCOUNT_AUTO_SIGNUP = True
。
答案 0 :(得分:2)
是的,似乎我忽略了他们的文档或者他们最近更新了它,问题是我使用“注册流程”来登录已经注册的用户,因此allauth用于呈现此注册表单。您可以通过写下来避免这种情况:
<a href="{% provider_login_url "facebook" process="login" method="oauth2" %}">
的 login with facebook
</a>
并且您的注册链接将如下所示:
<a href="{% provider_login_url "facebook" method="oauth2" %}">
的 sign up with facebook
</a>
要将多个帐户连接到同一封电子邮件,您需要定义一个这样的适配器:
class SocialLoginAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
# This is tested and should work
try:
user = User.objects.get(email=sociallogin.account.user.email)
sociallogin.connect(request, user)
# Create a response object
response = HttpResponse()
raise ImmediateHttpResponse(response)
except Exception:
pass
并在你的settings.py中提到这一点
SOCIALACCOUNT_ADAPTER = 'path_to_your_adapter_module.SocialLoginAdapter'
这就是我的最终 settings.py 的样子(allauth part)
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "none" #later change to mandatory
ACCOUNT_SIGNUP_PASSWORD_VERIFICATION = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
SOCIALACCOUNT_EMAIL_REQUIRED = True
SOCIALACCOUNT_AUTO_SIGNUP = True
# custom adapter to override login behavior and associate different social profiles with same email,with same user
SOCIALACCOUNT_ADAPTER = 'path_to_your_adapter_module.SocialLoginAdapter'