is_authenticated 对 AnonymousUser 返回 True

发布于 2024-12-12 10:29:47 字数 581 浏览 0 评论 0原文

当我未登录时,我正在努力解决 is_authenticated 返回 True 的问题:

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

澄清一下,Django 调试视图正确地将 u 识别为 AnonymousUser

u   <django.contrib.auth.models.AnonymousUser object at 0x9e76f4cc>

更奇怪的是,在模板内 is_anonymous 工作正常:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

这是为什么?

I am struggling with is_authenticated returning True when I'm not logged in:

u = request.user
if u.is_authenticated:
    raise Exception('I am said to be authenticated, but I really am not.')

To clarify, Django debug view correctly identifies u as an AnonymousUser:

u   <django.contrib.auth.models.AnonymousUser object at 0x9e76f4cc>

Even more odd, inside the template is_anonymous works fine:

{% if not request.user.is_authenticated %}
    We are anonymous.
{% endif %}

Why is that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

超可爱的懒熊 2024-12-19 10:29:47

这是一个 方法,不是财产。你需要调用它:

if u.is_authenticated():

当然,在模板中,Django 自动为您调用方法

It's a method, not a property. You need to call it:

if u.is_authenticated():

Of course, in a template, Django calls methods for you automatically.

剑心龙吟 2024-12-19 10:29:47

is_authenticated 是一种方法,因此您需要一些括号。否则,u.is_authenticated 是函数对象,它是一个Trueish 值。

在模板语言中,没有参数的函数被评估为函数,所以这就是你擅长的原因。

is_authenticated is a method, so you need some parentheses there. Otherwise, u.is_authenticated is the function object, which is a Trueish value.

In the template language, functions with no arguments are evaluated as functions, so that's why you're good there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文