django.contrib.auth.views.login returns 匿名用户

django.contrib.auth.views.login returns Anonymous user

我想在注册后登录我的用户,但是当调用 login(request, user)request.user 仍然是 AnonymousUser。

def register(request):
    if request.method=='POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            pwd = form.cleaned_data['password1']
            user = authenticate(username=username, password=pwd)
            if user is not None and user.is_active:
                auth_views.login(request, user)
            return redirect('/')
    else:
        form = RegistrationForm()

    return render(request, 'registration.html', {'form' : form})

在我自己的登录方法中调用login时,它工作正常。但是在

`register` view not:
def login(request):
    if request.method=="POST":
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None and user.is_active:
                auth_views.login(request, user)
                return redirect(reverse('chat'))
            else:
                return redirect('/')
    else:
        form = AuthenticationForm()

    return render(request, 'login.html', {'form':form})

尝试:

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a 'disabled account' error message
            ...
    else:
        # Return an 'invalid login' error message.
        ...

并检查您的会话设置

您还记得在您的设置文件中定义 Auth 用户吗?如果没有,您应该将以下行添加到您的 settings.py:

AUTH_USER_MODEL = 'your_app.your_usermodel'