W szablonach Symfony 2 (przy użyciu Twig), jak mogę skutecznie sprawdzić, czy użytkownik nie jest zalogowany?
Nie chcę używać ROLE
czeków. Chcę w prosty sposób sprawdzić, czy użytkownik nie jest zalogowany.
Jestem świadomy tego w porównaniu app.user.username
z anon
pracami, ale to po prostu nie wydaje mi się właściwe.
symfony
authentication
twig
symfony-2.1
Narzędzie
źródło
źródło
{% if not app.user %}
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
zamiast tego. Zobacz dokumentację Symfony2: symfony.com/doc/current/book/… . Dostępne również dla Silex: silex.sensiolabs.org/doc/providers/…{% if is_granted('IS_AUTHENTICATED_FULLY') %}
zwróci wartość true tylko wtedy, gdy użytkownik uwierzytelnił się w bieżącej sesji. Zwróci wartość false, jeśli użytkownik uwierzytelniony za pomocą pliku cookie zapamiętaj mnie. Użycie{% if app.user %}
jest poprawne, jeśli chce się zwrócić true niezależnie od tego, kiedy użytkownik został uwierzytelniony.{% if app.security.token is null or app.security.token.user == 'anon.' %}
tak to działało dla mnieChociaż obecna odpowiedź odpowiada na pytanie PO, chciałbym dodać więcej szczegółów.
Rozumiem, że OP nie chciał sprawdzać ról, ale dołączam je, aby inni użytkownicy SO mogli kopiować i wklejać z tego w przyszłości. - za każdym razem, gdy to wyszukuję w Google, kończę tutaj!
Źródła dokumentów Symfony:
Sprawdź, czy zalogował się jakikolwiek użytkownik (niezależnie od roli)
Zgodnie z odpowiedzią możesz użyć,
app.user
aby sprawdzić, czy jakikolwiek użytkownik jest zalogowany.Sprawdzanie statusu uwierzytelnienia
Możesz użyć
is_granted()
metody, aby sprawdzićROLES
, czy (poniżej są wszystkie role przypisane przez symfony, możesz też mieć swoje własne role (więcej poniżej) )z dokumentów:
Sprawdzanie ról
Możesz również użyć
is_granted()
do sprawdzenia ról.Zakładając, że mamy 3 role (
ROLE_SUPER_ADMIN
,ROLE_ADMIN
, iROLE_USER
)Wykonanie powyższego wewnątrz kontrolera
Zobacz następującą odpowiedź: Jak sprawdzić, czy użytkownik jest zalogowany w Symfony2 wewnątrz kontrolera?
źródło
-%}
i co{%-
oznacza? dlaczego nie%}
i{%
?-
Usuwa wszystkie końcowe białe znaki tak, że to jest bardziej czytelny w kodzie źródłowym przeglądarki. Więcej informacji tutaj: twig.sensiolabs.org/doc/templates.html#whitespace-controlapp.user
takiThe value stored in this variable can be a UserInterface object, any other object which implements a __toString() method or even a regular string.
. Nie pamiętam, gdzie przeczytałem, że app.user zwraca „anon”. ciąg niestety iw jakich okolicznościach.The representation of the current user or null if there is none.
, więc będzie miała wartość null. Pakiet innej firmy może zwrócić ciąg, jeśli jego niestandardowaUserInterface
implementacja ma__toString()
metodę, która jest wywoływana, gdy jest anonimowa.