Symfony 2:如何检查用户是否未在模板中登录?

Too*_*ool 98 authentication symfony twig symfony-2.1

在Symfony 2模板(使用Twig)中,如何有效地检查用户是否未登录?

我不想用ROLE支票.我想要一种直接的方法来检查用户是否未登录.

我知道app.user.usernameanon作品相比,但这对我来说感觉不对.

Che*_*sum 188

您可以检查是否设置了app.user.

 {% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 请改用`{%if is_granted('IS_AUTHENTICATED_FULLY')%}.请参阅Symfony2 doc:http://symfony.com/doc/current/book/security.html#retrieving-the-user-object.也适用于Silex:http://silex.sensiolabs.org/doc/providers/security.html#checking-user-roles (44认同)
  • 请注意,如果要检查用户是否未登录,可以使用:`{%if not app.user%}` (17认同)
  • @Ronan``` {%if is_granted('IS_AUTHENTICATED_FULLY')%}```只有在用户在当前会话中进行了身份验证时才会返回true.如果用户通过记住我的cookie进行身份验证,它将返回false.使用```{%if app.user%}```是正确的,如果想要返回true,无论用户何时进行身份验证. (16认同)

Ani*_*nil 95

虽然目前的答案回答了OP的问题,但我想补充更多细节.

我知道OP不想检查角色,但是我将它们包含在内,以便其他SO用户可以在将来复制和粘贴. - 每次我谷歌这个,我最终来到这里!

Symfony Doc来源:


检查是否有用户登录(无论角色如何)

如您所述,您可以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 %}
Run Code Online (Sandbox Code Playgroud)

检查身份验证状态

您可以使用该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 %}
Run Code Online (Sandbox Code Playgroud)

来自文档:

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 %}
Run Code Online (Sandbox Code Playgroud)

在控制器内执行上述操作

查看以下答案:如何检查用户是否在控制器内登录Symfony2?

  • `-`删除所有尾随空格,以便在浏览器源代码中更具可读性.更多信息:http://twig.sensiolabs.org/doc/templates.html#whitespace-control (11认同)
  • 我只是好奇......什么` - %}`和`{%-`代表什么?为什么不是`%}`和`{%`? (2认同)