1

我试图让用户在 Django 中注册,然后将他重定向到他的主页,即“仪表板”。虽然,它被注册但由于提供的身份验证(@login_required),用户不会被重定向到他的主页。用户必须再次提交他的用户名和密码才能登录页面。

这是我的意见.py

def register(request):
    form = RegisterForm(request.POST or None)

    if(form.is_valid()):
        user = form.save()
        login(request,user)
        return redirect('/dashboard/')

    ctx = {
            'form' : form
    }

    return render_to_response('home/register.html',ctx, context_instance = RequestContext(request))


@login_required
def dashboard(request):
    HttpResponse("HELLO")
4

1 回答 1

2

您需要先使用authenticate(),然后再调用login().

from django.contrib.auth import authenticate, login
if(form.is_valid()):
    form.save()
    new_user = authenticate(username=form.cleaned_data.get('username'), 
                            password= form.cleaned_data.get('password'))
    login(request,new_user)
    return redirect('/dashboard/')

来自Django 文档

当您手动登录用户时,您必须在调用 login() 之前调用 authenticate()。authenticate() 在 User 上设置一个属性,指出哪个身份验证后端成功地验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息。如果您尝试直接登录从数据库中检索的用户对象,则会引发错误。

于 2013-07-30T12:57:37.890 回答