Symfony 2: Bir kullanıcının bir şablon içinde oturum açıp açmadığını nasıl kontrol ederim?


102

Symfony 2 şablonlarında (Twig kullanarak), bir kullanıcının oturum açıp açmadığını nasıl etkili bir şekilde kontrol edebilirim?

ROLEÇek kullanmak istemiyorum . Bir kullanıcının oturum açıp açmadığını kontrol etmenin basit bir yolunu istiyorum.

Ben karşılaştırarak farkındayım app.user.usernameile anonişlerin, ama bu sadece bana doğru gelmiyor.

Yanıtlar:


191

App.user'ın ayarlanıp ayarlanmadığını kontrol edebilirsiniz.

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

17
Kullanıcının oturum açmış OLMADIĞINI kontrol etmek istiyorsanız şunu kullanabilirsiniz:{% if not app.user %}
Mac_Cain13

44
{% if is_granted('IS_AUTHENTICATED_FULLY') %}Bunun yerine kullanın . Symfony2 belgesine bakın: symfony.com/doc/current/book/… . Silex için de mevcuttur: silex.sensiolabs.org/doc/providers/…
Ronan

16
@Ronan {% if is_granted('IS_AUTHENTICATED_FULLY') %}, yalnızca kullanıcı mevcut oturumda kimlik doğrulaması yaptıysa true döndürür. Kullanıcı, beni hatırla tanımlama bilgisiyle doğrulanırsa yanlış döndürür. Kullanılması {% if app.user %}bir kullanıcı kimliği doğrulanmış zaman bakılmaksızın gerçek dönmek istiyorsa, doğrudur.
RayOnAir

@Ronan, aşağıdaki hatayla sonuçlandığı için çalışmıyor: "Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken" sınıfının belirteci için Kimlik Doğrulama Sağlayıcısı bulunamadı.
Harold

{% if app.security.token is null or app.security.token.user == 'anon.' %}işte böyle çalıştırdım
Sebastian G. Marinescu

98

Mevcut cevap OP'nin sorusunu yanıtlasa da daha fazla ayrıntı eklemek isterim.

OP'nin rolleri kontrol etmek istemediğini anlıyorum, ancak onları dahil ediyorum, böylece diğer SO kullanıcıları gelecekte bundan kopyalayıp yapıştırabilir. - bunu her google'da aradığımda, buraya geliyorum!

Symfony Doc Kaynakları:


Herhangi bir kullanıcının oturum açıp açmadığını kontrol edin (role bakılmaksızın)

Yanıtlandığı gibi, herhangi bir kullanıcının oturum açıp açmadığını app.userkontrol etmek için kullanabilirsiniz .

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

Kimlik doğrulama durumu kontrol ediliyor

is_granted()Kontrol etmek için yöntemi kullanabilirsiniz ROLES, (Aşağıdakiler symfony tarafından atanan rollerdir, kendi rolleriniz de olabilir (daha fazlası aşağıda) )

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

dokümanlardan:

IS_AUTHENTICATED_ANONYMOUSLY - sitenin güvenlik duvarıyla korunan bir bölümünde bulunan ancak gerçekte oturum açmamış bir kullanıcıya otomatik olarak atanır. Bu yalnızca anonim erişime izin verilmişse mümkündür.

IS_AUTHENTICATED_REMEMBERED - bir beni hatırla çereziyle kimliği doğrulanan bir kullanıcıya otomatik olarak atanır.

IS_AUTHENTICATED_FULLY - mevcut oturum sırasında oturum açma ayrıntılarını sağlayan bir kullanıcıya otomatik olarak atanır.


Rolleri Kontrol Etmek

is_granted()Rolleri kontrol etmek için de kullanabilirsiniz .
Biz 3 rolleri varsayarsak ( 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 %}

Yukarıdakileri bir kontrolörün içinde yapmak

Aşağıdaki yanıtı görüntüleyin: Bir kullanıcının bir denetleyici içinde Symfony2'de oturum açıp açmadığını nasıl kontrol edebilirim?


2
Sadece merak ediyorum ... -%}ve ne anlama geliyor {%-? neden olmasın %}ve {%?
V-Light

11
-Bu nedenle tarayıcı kaynak kaynağında daha okunabilir olduğunu boşluk tüm sondaki kaldırır. Daha fazla bilgi burada: twig.sensiolabs.org/doc/templates.html#whitespace-control
Anil

Bu eski soruyu tekrar hayata geçirdiğim için beni affet, ama sanırım bir yerde o app.user anonim kullanıcılar için boş olmayacak, bu doğru değil mi? Bu, app.user kontrolünün yeterli olmadığı anlamına gelmez mi?
pzaj

@Anil symfony.com/doc/2.8/templating/app_variable.html Açıklanan ikinci parametre ise şöyle app.usergidiyor The value stored in this variable can be a UserInterface object, any other object which implements a __toString() method or even a regular string.. Bu app.user nerede okuduğumu hatırlamıyorum "anon" döndürüyor. dize ne yazık ki ve hangi koşullarda.
pzaj

1
@ user1970395 Dokümanlardaki ilk satır okundu The representation of the current user or null if there is none., bu yüzden boş olacak. Bir üçüncü taraf paketi, özel UserInterfaceuygulaması __toString()anonim olduğunda çağrılan bir yönteme sahipse bir dize döndürebilir .
Anil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.