Symfony 2: ¿Cómo puedo comprobar si un usuario no ha iniciado sesión dentro de una plantilla?


En las plantillas de Symfony 2 (usando Twig), ¿cómo puedo verificar efectivamente si un usuario no ha iniciado sesión?

No quiero usar ROLE cheques. Quiero una forma sencilla de comprobar si un usuario no ha iniciado sesión.

Soy consciente de que comparar app.user.username con anon funciona, pero eso no me parece correcto.

Author: Mohammed Zayan, 2012-03-12

2 answers

Puede comprobar si la aplicación.el usuario está configurado.

 {% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}
 174
Author: Checksum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-01 17:49:34

Aunque la respuesta actual responde a la pregunta del OP, me gustaría añadir más detalles.

Entiendo que el OP no quería verificar los roles, pero los estoy incluyendo para que otros usuarios puedan copiar y pegar de esto en el futuro. - ¡cada vez que busco esto en Google, termino aquí!

Symfony Doc Fuentes:


Compruebe si algún usuario ha iniciado sesión (independientemente del rol)

Como respuesta, puede usar app.user para verificar si cualquier usuario de está conectado.

{% 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 %}

Comprobación del estado de autenticación

Puede usar el método is_granted() para verificar ROLES, (Los siguientes son todos los roles asignado por symfony, También puede tener sus propios roles (más abajo))

{% 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 %}

de los documentos:

IS_AUTHENTICATED_ANONYMOUSLY-asignado automáticamente a un usuario que es en un firewall protegido parte del sitio, pero que en realidad no ha iniciado sesión. Esto solo es posible si se ha permitido el acceso anónimo.

IS_AUTHENTICATED_REMEMBERED-asignado automáticamente a un usuario que fue autenticado a través de una cookie recordarme.

IS_AUTHENTICATED_FULLY-asignado automáticamente a un usuario que tiene proporcionó sus datos de inicio de sesión durante la sesión actual.


Comprobación de roles

También puede usar is_granted() para verificar los roles.
Asumiendo que tenemos 3 roles (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 %}

Haciendo lo anterior dentro de un controlador

Vea la siguiente respuesta: ¿Cómo comprobar si un usuario ha iniciado sesión en Symfony2 dentro de un controlador?

 86
Author: Anil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:19