You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django用户注册后跳转个人页面显示AnonymousUser问题

嘿,我来帮你搞定这个问题!用户注册后跳转到个人资料页却显示AnonymousUser,大概率是因为你只创建了用户账号,但没有在注册完成后自动登录这个用户,或者表单处理时密码没有正确哈希导致后续登录失败。我给你整理几个关键的修复点:

一、先把表单的密码处理做对

你的RegisterUserForm继承自ModelForm的话,默认不会自动给密码做哈希处理,所以得重写save方法来处理密码,最好再加个确认密码的字段避免用户输错:

from django import forms
from django.contrib.auth.models import User

class RegisterUserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
    confirm_password = forms.CharField(widget=forms.PasswordInput())  # 新增确认密码字段

    class Meta:
        model = User
        fields = ['username', 'email', 'password']

    # 验证密码是否匹配
    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get("password")
        confirm_pwd = cleaned_data.get("confirm_password")

        if password != confirm_pwd:
            self.add_error('confirm_password', "两次输入的密码不匹配哦")
        return cleaned_data

    # 重写save方法,给密码哈希
    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password"])  # 关键:哈希密码
        if commit:
            user.save()
        return user
二、修改注册视图,注册完成后自动登录用户

这是最关键的一步!很多人会忽略创建用户后调用login方法,导致会话里没有记录用户身份,自然显示AnonymousUser:

from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import RegisterUserForm

def register(request):
    if request.method == 'POST':
        form = RegisterUserForm(request.POST)
        if form.is_valid():
            user = form.save()  # 保存用户
            login(request, user)  # 重点:登录刚创建的用户
            return redirect('profile')  # 跳转到个人资料页(这里的'profile'是你配置的URL名称)
    else:
        form = RegisterUserForm()
    return render(request, 'register.html', {'form': form})
三、检查个人资料视图的用户获取逻辑

确保你的个人资料页是从request.user拿当前用户,而不是用其他错误的方式:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required  # 建议加上这个装饰器,强制只有登录用户能访问
def profile(request):
    current_user = request.user  # 直接从request获取登录用户
    return render(request, 'profile.html', {'user': current_user})
四、确认中间件配置没问题

最后检查下settings.py里的中间件,这两个是保持用户登录状态的基础,不能少:

MIDDLEWARE = [
    # ... 其他中间件
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # ... 其他中间件
]

按照上面的步骤改完,用户注册后就会自动登录,跳转到个人资料页时就能正确显示自己的信息,不会再是AnonymousUser啦!

内容的提问来源于stack exchange,提问作者ailinmc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:37