Django中用户何时变成AnonymousUser?

1 投票
3 回答
1707 浏览
提问于 2025-04-17 00:03

我想弄清楚请求中的用户(request.user)到底在什么时候变成了匿名用户(AnonymousUser)。我已经在整个身份验证后台找过了,但就是找不到。难道我找错地方了吗?

我知道每个没有经过身份验证的用户都会变成匿名用户,但我需要知道这个过程发生在什么地方和什么时间,因为我正在写一些代码。

如果有人能帮忙,我会非常感激。

3 个回答

0

在"contrib/auth/init.py"文件中的logout方法也会影响到AnonymousUser(),也就是请求中的user。看看下面的代码:

if hasattr(request, 'user'):
    from django.contrib.auth.models import AnonymousUser
    request.user = AnonymousUser()
4

这一切都在 django.contrib.auth.middleware 模块里 - 你可以在这里查看详细信息: https://github.com/django/django/blob/master/django/contrib/auth/middleware.py#L49

6

这是一个文件路径,指的是在某个项目中的一个特定文件。具体来说,contrib\auth\__init__.py 是一个 Python 文件,位于名为 "contrib" 的文件夹下的 "auth" 子文件夹里。数字 80 可能表示这个文件中的某一行代码,通常用来帮助开发者快速找到问题所在。

def get_user(request):
    from django.contrib.auth.models import AnonymousUser
    try:
        user_id = request.session[SESSION_KEY]
        backend_path = request.session[BACKEND_SESSION_KEY]
        backend = load_backend(backend_path)
        user = backend.get_user(user_id) or AnonymousUser()
    except KeyError:
        user = AnonymousUser()
    return user

撰写回答