Django:重定向后没有设置request.user

aut*_*con 7 authentication django

具体来说,在身份验证和重定向之后,request.user是一个匿名用户.

登录(查看功能)

def login(request):
if request.method == 'POST':

    form = LoginForm(request.POST) 

    if form.is_valid():
        #django.contrib.auth.login
        Login(request, form.get_user())
        str = reverse('cm_base.views.index')
        return HttpResponseRedirect(str)
    else:
            # Their password / email combination must have been incorrect
        pass

else:
    form = LoginForm()

return render_to_response('cm_base/login.html', 
                          {"DEBUG": True,
                           'form' : form
                           },
                          context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

在索引视图中,我删除了login_required装饰器并测试了request.user对象

def index(request):
test = request.user.is_authenticated()

return render_to_response('cm_base/index.html', 
                          {"DEBUG": True,
                           "user": request.user,},
                          context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

测试返回false.

固定

我最后只是直接调用索引视图.当我调用HttpResponseRedirect时,我仍然对用户对象丢失的原因感到困惑.

def login(request):
if request.method == 'POST':
    form = LoginForm(request.POST) # Not shown in this example

    if form.is_valid():
        Login(request, form.get_user())
        str = reverse('cm_base.views.index')
        return index(request)
    else:
            # Their password / email combination must have been incorrect
        pass

else:
    form = LoginForm()
Run Code Online (Sandbox Code Playgroud)

man*_*xxl 1

您使用什么身份验证后端?如果它不是 ModelBackend,请确保您的 get_user 方法正确。听起来好像 auth 中间件正在发送与您在 get_user 方法中查找的标识符不同的标识符(例如 pk 而不是用户名)。