web-dev-qa-db-fra.com

Symfony 2: Comment vérifier si un utilisateur n'est pas connecté à l'intérieur d'un modèle?

Dans les modèles Symfony 2 (utilisant Twig), comment puis-je vérifier efficacement si un utilisateur n'est pas connecté?

Je ne veux pas utiliser ROLE chèques. Je veux un moyen simple de vérifier si un utilisateur n'est pas connecté.

Je suis conscient que la comparaison de app.user.username Avec anon fonctionne, mais cela ne me convient pas du tout.

98
Tool

Vous pouvez vérifier si app.user est défini.

 {% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}
187
Checksum

Bien que la réponse actuelle réponde à la question du PO, j'aimerais ajouter plus de détails.

Je comprends que l'OP n'a pas voulu vérifier les rôles, mais je les ai inclus afin que d'autres SO les utilisateurs puissent copier et coller à partir de cela ultérieurement. - à chaque fois Je google cela, je finis ici!

Sources de Symfony Doc:


Vérifier si un utilisateur est connecté (quel que soit son rôle)

Après réponse, vous pouvez utiliser app.user Pour vérifier si un utilisateur est connecté.

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

Vérification de l'état de l'authentification

Vous pouvez utiliser la méthode is_granted() pour vérifier ROLES, (Tous les rôles ci-dessous sont attribués par symfony. Vous pouvez également avoir vos propres rôles (plus ci-dessous) )

{% 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 la documentation:

IS_AUTHENTICATED_ANONYMOUSLY - attribué automatiquement à un utilisateur qui se trouve dans une partie du site protégée par un pare-feu mais qui ne s'est pas connecté réellement. Cela n'est possible que si l'accès anonyme a été autorisé.

IS_AUTHENTICATED_REMEMBERED - attribué automatiquement à un utilisateur authentifié via un cookie Remember me.

IS_AUTHENTICATED_FULLY - attribué automatiquement à un utilisateur qui a fourni ses informations de connexion pendant la session en cours.


Vérification des rôles

Vous pouvez également utiliser is_granted() pour vérifier les rôles.
En supposant que nous ayons 3 rôles (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 %}

Faire ce qui précède à l'intérieur d'un contrôleur

Voir la réponse suivante: Comment vérifier si un utilisateur est connecté à Symfony2 dans un contrôleur?

94
Anil