在Symfony 2模板中(使用Twig),如何有效地检查一个用户是否未登录?
我不想使用ROLE检查。我想要一种直截了当的方法来检查用户是否未登录。
我知道将`app.user.username`与`anon`进行比较可以解决,但那样做感觉不太对。
我不想使用ROLE检查。我想要一种直截了当的方法来检查用户是否未登录。
我知道将`app.user.username`与`anon`进行比较可以解决,但那样做感觉不太对。
您可以检查 app.user 是否已设置。
{% if app.user %}
# user is logged in
{% else %}
# user is not logged in
{% endif %}
虽然当前答案回答了OP的问题,但我想添加更多细节。
我知道OP不想检查角色,但我会包含它们,以便其他Stack Overflow用户可以在未来从中复制和粘贴。- 每次我谷歌这个问题,都会到达这里!
Symfony文档来源:
如已回答,您可以使用app.user
检查是否有任何用户已登录。
{% if app.user %}
# user is logged in (any and all users, regardless of ROLE_*)
{% elseif not app.user %}
# user is not logged in (note the `not` in the `elseif` statement)
{% endif %}
您可以使用is_granted()
方法来检查ROLES
,(以下是Symfony分配的所有角色,您也可以拥有自己的角色(更多请见下文))。
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
# This user entered their credentials THIS session
{% elseif is_granted('IS_AUTHENTICATED_REMEMBERED') %}
# User logged in via a cookie (ie: Auth again before doing sensitive things)
{% elseif is_granted('IS_AUTHENTICATED_ANONYMOUSLY') %}
# This is a `guest` or anonymous user
{% endif %}
来自文档:
IS_AUTHENTICATED_ANONYMOUSLY - 自动分配给在网站的防火墙保护部分但尚未登录的用户。只有在允许匿名访问时才可能。
IS_AUTHENTICATED_REMEMBERED - 自动分配给通过记住我cookie进行身份验证的用户。
IS_AUTHENTICATED_FULLY - 自动分配给在当前会话期间提供了他们的登录详细信息的用户。
你也可以使用is_granted()
来检查角色。
假设我们有3个角色(ROLE_SUPER_ADMIN
、ROLE_ADMIN
和ROLE_USER
)
{% if is_granted('ROLE_SUPER_ADMIN') -%}
# You're `ROLE_SUPER_ADMIN`
{% elseif is_granted('ROLE_ADMIN') -%}
# You're `ROLE_ADMIN`
{% elseif is_granted('ROLE_USER') -%}
# You're `ROLE_USER`
{% else %}
# You're a `nobody` ;P
{%- endif %}
请查看以下答案:如何在Symfony2控制器内检查用户是否已登录?
-%}
和{%-
代表什么?为什么不用%}
和{%
? - V-LightUserInterface
实现具有一个__toString()
方法,当匿名时会调用该方法并返回一个字符串。 - Anil
{% if not app.user %}
。 - Mac_Cain13{% if is_granted('IS_AUTHENTICATED_FULLY') %}
。请参阅Symfony2文档:http://symfony.com/doc/current/book/security.html#retrieving-the-user-object。也适用于Silex的:http://silex.sensiolabs.org/doc/providers/security.html#checking-user-roles。 - Ronan{% if is_granted('IS_AUTHENTICATED_FULLY') %}
将返回true。如果用户通过"记住我"的方式进行了身份验证,则它将返回false。如果想要无论用户何时进行身份验证都返回true,使用{% if app.user %}
是正确的。 - RayOnAir{% if app.security.token is null or app.security.token.user == 'anon.' %}
这是我让它对我起作用的方式。 - Sebastian G. Marinescu