Django注册后登录

问题描述 投票:0回答:1

我试图在注册后自动登录用户,但任何事情似乎都有效。

不起作用:

if registroForm.is_valid():
        registroForm.save()
        user = authenticate(username=registroForm.cleaned_data['username'], password=registroForm.cleaned_data['password1'])
        request.session['_auth_user_id'] = user.pk
        request.session['_auth_user_backend'] = user.backend
        return JsonResponse({})

不起作用:

if registroForm.is_valid():
        registroForm.save()
        usuario = authenticate(username=registroForm.cleaned_data['username'], password=registroForm.cleaned_data['password1'])
        login(request, usuario)
        return JsonResponse({})

我正在使用Django 2.0

python django
1个回答
1
投票

这是我按照Django docs这样做的方式:

def post(self,request):
    form = self.form(request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = User.objects.create_user(username, username, password)
        login(request, user)
        return HttpResponseRedirect(reverse(request.POST['next']))
    context = {'form' : form,
               'title': self.title,
               'myurl' : self.myurl,
               'submit': self.submit,
               'nexturl' : self.nexturl,
               }
    return render(request, self.template_name, context)

对于我的应用程序,我必须在验证失败的情况下在上下文中添加一些额外的东西。你应该能够在那里传递表格。

编辑:

你不想在这里使用authenticate。由于这是注册,您需要创建新用户(create_user()),然后使用该用户的信息调用login(这是在except之后的代码块中间的行)。然后重定向到配置文件更新页面,您可以在其中提示用户输入要与用户一起存储的其他信息。

© www.soinside.com 2019 - 2024. All rights reserved.