我正在尝试设置allauth,以便当用户成功注册时,他们会在注册之前重定向回页面并自动登录。
我使用自定义帐户适配器进行重定向。但是他们没有登录。奇怪的是,allauth确实在邮件中添加了“成功登录为X”。检查模板中的{% if request.user.is_authenticated %}
将返回false,is_active
也是如此。我需要手动登录。
我对allauth的设置是:
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "optional"
ACCOUNT_USERNAME_REQUIRED = True
ACCOUNT_SIGNUP_FORM_CLASS = 'main.forms.SignupForm'
LOGIN_REDIRECT_URL = '/'
ACCOUNT_PRESERVE_USERNAME_CASING = True
ACCOUNT_ADAPTER = 'main.adapters.MyAccountAdapter
adapters.py
class MyAccountAdapter(DefaultAccountAdapter):
def get_login_redirect_url(self, request):
path = request.POST.get('next', '/')
return path.format(username=request.user.username)
{{ request.user }}
返回AnonymousUser
forms.py
class SignupForm(forms.Form):
password1 = forms.CharField(widget=forms.PasswordInput)
password2 = forms.CharField(widget=forms.PasswordInput)
def signup(self, request, user):
reviewer = Reviewer()
reviewer.user = user
reviewer.user.email = self.cleaned_data['email']
reviewer.user.password = self.cleaned_data['password1']
reviewer.user.username = self.cleaned_data['username']
reviewer.save()
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
虽然重定向仍然按预期工作,但调试看起来并不像我的自定义帐户适配器一样。
好的,我发现重定向按预期工作,因为我在allauth使用的表单中提供了“下一个”字段。
更新
单步执行代码,看起来request.user
完成了allauth代码,is_authenticated
和is_active
都是正确的。它被传递给Django中间件,它仍然如预期的那样并且创建了响应。然后我相信正在进行另一次重定向,当request
对象点击用户从request.user
注册的页面的视图时,它已被清除,现在它是AnonymousUser
。< / p>
答案 0 :(得分:0)
似乎是问题所在的SignupForm
def signup
。我删除了密码字段和self.cleaned_data
字段,现在它按预期工作。老实说,我不知道为什么这会阻止自动登录,但保存用户模型并且不会丢失任何错误。