Django:注册后,user.is_authenticated为false,allauth

时间:2017-03-03 10:50:41

标签: django django-allauth

我正在尝试设置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_authenticatedis_active都是正确的。它被传递给Django中间件,它仍然如预期的那样并且创建了响应。然后我相信正在进行另一次重定向,当request对象点击用户从request.user注册的页面的视图时,它已被清除,现在它是AnonymousUser。< / p>

1 个答案:

答案 0 :(得分:0)

似乎是问题所在的SignupForm def signup。我删除了密码字段和self.cleaned_data字段,现在它按预期工作。老实说,我不知道为什么这会阻止自动登录,但保存用户模型并且不会丢失任何错误。