Symfony 2: Wie überprüfe ich, ob ein Benutzer nicht in einer Vorlage angemeldet ist?

101

Wie kann ich in Symfony 2-Vorlagen (mit Twig) effektiv überprüfen, ob ein Benutzer nicht angemeldet ist?

Ich möchte keine ROLESchecks verwenden. Ich möchte auf einfache Weise überprüfen, ob ein Benutzer nicht angemeldet ist.

Ich bin mir bewusst, dass das Vergleichen app.user.usernamemit anonWerken funktioniert, aber das fühlt sich für mich einfach nicht richtig an.

Werkzeug
quelle

Antworten:

190

Sie können überprüfen, ob app.user eingestellt ist.

 {% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}
Prüfsumme
quelle
17
Beachten Sie, dass Sie {% if not app.user %}
Folgendes verwenden
44
Verwenden Sie {% if is_granted('IS_AUTHENTICATED_FULLY') %}stattdessen. Siehe Symfony2-Dokument: symfony.com/doc/current/book/… . Auch für Silex verfügbar: silex.sensiolabs.org/doc/providers/…
Ronan
16
@Ronan {% if is_granted('IS_AUTHENTICATED_FULLY') %}gibt nur dann true zurück, wenn sich der Benutzer in der aktuellen Sitzung authentifiziert hat. Es wird false zurückgegeben, wenn sich der Benutzer über ein Remember Me-Cookie authentifiziert hat. Die Verwendung {% if app.user %}ist korrekt, wenn true zurückgegeben werden soll, unabhängig davon, wann sich der Benutzer authentifiziert hat.
RayOnAir
@ Ronan, das funktioniert nicht, da es zu folgendem Fehler führt: Kein Authentifizierungsanbieter für Token der Klasse "Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken" gefunden.
Harold
{% if app.security.token is null or app.security.token.user == 'anon.' %}So habe ich es für mich zum Laufen gebracht
Sebastian G. Marinescu
98

Obwohl die aktuelle Antwort die Frage des OP beantwortet, möchte ich weitere Details hinzufügen.

Ich verstehe, dass das OP keine Rollen überprüfen wollte, aber ich schließe sie ein, damit andere SO-Benutzer diese in Zukunft kopieren und einfügen können. - Jedes Mal, wenn ich das google, lande ich hier!

Symfony Doc Quellen:


Überprüfen Sie, ob sich ein Benutzer angemeldet hat (unabhängig von der Rolle).

Wie beantwortet, können Sie app.userüberprüfen, ob ein Benutzer angemeldet ist.

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

Überprüfen des Authentifizierungsstatus

Sie können die is_granted()Methode verwenden, um ROLESFolgendes zu überprüfen : (Im Folgenden sind alle von symfony zugewiesenen Rollen aufgeführt. Möglicherweise haben Sie auch eigene Rollen (mehr unten). )

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

aus den Dokumenten:

IS_AUTHENTICATED_ANONYMOUSLY - Wird automatisch einem Benutzer zugewiesen, der sich in einem Firewall-geschützten Teil der Site befindet, sich jedoch nicht angemeldet hat. Dies ist nur möglich, wenn anonymer Zugriff zugelassen wurde.

IS_AUTHENTICATED_REMEMBERED - Wird automatisch einem Benutzer zugewiesen, der über ein Erinnerungscookie authentifiziert wurde.

IS_AUTHENTICATED_FULLY - Wird automatisch einem Benutzer zugewiesen, der während der aktuellen Sitzung seine Anmeldedaten angegeben hat.


Rollen überprüfen

Sie können auch is_granted()nach Rollen suchen.
Unter der Annahme , wir drei Rollen haben ( 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 %}

Gehen Sie in einem Controller wie oben beschrieben vor

Zeigen Sie die folgende Antwort an: Wie kann ich überprüfen, ob ein Benutzer in Symfony2 in einem Controller angemeldet ist?

Anil
quelle
2
Ich bin nur neugierig ... wofür -%}und {%-steht? warum nicht %}und {%?
V-Light
11
Das -entfernt alle nachgestellten Leerzeichen, damit sie in der Quellquelle des Browsers besser lesbar sind. Weitere Informationen hier: twig.sensiolabs.org/doc/templates.html#whitespace-control
Anil
Verzeihen Sie mir, dass ich diese alte Frage wieder zum Leben erweckt habe, aber ich glaube, ich habe irgendwo gelesen, dass app.user für anonyme Benutzer nicht null ist, stimmt das nicht? Würde das nicht bedeuten, dass die Überprüfung auf app.user nicht ausreicht?
Pzaj
@Anil symfony.com/doc/2.8/templating/app_variable.html Der zweite beschriebene Parameter lautet app.userwie folgt The value stored in this variable can be a UserInterface object, any other object which implements a __toString() method or even a regular string.. Ich kann mich nicht erinnern, wo ich gelesen habe, dass app.user "anon" zurückgibt. String leider und unter welchen Umständen.
Pzaj
1
@ user1970395 Die erste Zeile in den Dokumenten wird gelesen The representation of the current user or null if there is none., daher ist sie null. Ein Drittanbieter-Bundle kann eine Zeichenfolge zurückgeben, wenn die benutzerdefinierte UserInterfaceImplementierung über eine __toString()Methode verfügt , die anonym aufgerufen wird.
Anil