Wie kann ich in Symfony 2-Vorlagen (mit Twig) effektiv überprüfen, ob ein Benutzer nicht angemeldet ist?
Ich möchte keine ROLE
Schecks verwenden. Ich möchte auf einfache Weise überprüfen, ob ein Benutzer nicht angemeldet ist.
Ich bin mir bewusst, dass das Vergleichen app.user.username
mit anon
Werken funktioniert, aber das fühlt sich für mich einfach nicht richtig an.
symfony
authentication
twig
symfony-2.1
Werkzeug
quelle
quelle
{% if not app.user %}
{% 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/…{% 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.{% if app.security.token is null or app.security.token.user == 'anon.' %}
So habe ich es für mich zum Laufen gebrachtObwohl 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.Überprüfen des Authentifizierungsstatus
Sie können die
is_granted()
Methode verwenden, umROLES
Folgendes zu überprüfen : (Im Folgenden sind alle von symfony zugewiesenen Rollen aufgeführt. Möglicherweise haben Sie auch eigene Rollen (mehr unten). )aus den Dokumenten:
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
)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?
quelle
-%}
und{%-
steht? warum nicht%}
und{%
?-
entfernt alle nachgestellten Leerzeichen, damit sie in der Quellquelle des Browsers besser lesbar sind. Weitere Informationen hier: twig.sensiolabs.org/doc/templates.html#whitespace-controlapp.user
wie folgtThe 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.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 benutzerdefinierteUserInterface
Implementierung über eine__toString()
Methode verfügt , die anonym aufgerufen wird.