Symfony 2: ฉันจะตรวจสอบได้อย่างไรว่าผู้ใช้ไม่ได้เข้าสู่ระบบภายในเทมเพลต


102

ในเทมเพลต Symfony 2 (โดยใช้ Twig) ฉันจะตรวจสอบได้อย่างไรว่าผู้ใช้ไม่ได้เข้าสู่ระบบหรือไม่

ฉันไม่ต้องการใช้ROLEเช็ค ฉันต้องการวิธีที่ตรงไปตรงมาในการตรวจสอบว่าผู้ใช้ไม่ได้เข้าสู่ระบบหรือไม่

ฉันรู้ว่าการเปรียบเทียบapp.user.usernameกับanonผลงาน แต่มันไม่เหมาะกับฉัน

คำตอบ:


191

คุณสามารถตรวจสอบว่าตั้งค่า app.user หรือไม่

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

17
โปรดทราบว่าหากคุณต้องการตรวจสอบว่าผู้ใช้ไม่ได้เข้าสู่ระบบหรือไม่คุณสามารถใช้:{% if not app.user %}
Mac_Cain13

44
ใช้{% if is_granted('IS_AUTHENTICATED_FULLY') %}แทน ดู Symfony2 doc: symfony.com/doc/current/book/… . มีให้สำหรับ Silex ด้วย: Silex.sensiolabs.org/doc/providers/…
Ronan

16
@Ronan {% if is_granted('IS_AUTHENTICATED_FULLY') %}จะคืนค่าจริงก็ต่อเมื่อผู้ใช้ตรวจสอบสิทธิ์ในเซสชันปัจจุบัน มันจะส่งคืนเป็นเท็จหากผู้ใช้ตรวจสอบสิทธิ์ผ่านคุกกี้จำฉัน การใช้งาน{% if app.user %}ถูกต้องหากต้องการคืนค่าจริงไม่ว่าผู้ใช้จะตรวจสอบสิทธิ์เมื่อใด
RayOnAir

@Ronan ซึ่งไม่ทำงานเนื่องจากทำให้เกิดข้อผิดพลาดต่อไปนี้: ไม่พบผู้ให้บริการการรับรองความถูกต้องสำหรับโทเค็นของคลาส "Symfony \ Component \ Security \ Core \ Authentication \ Token \ PreAuthenticatedToken"
Harold

{% if app.security.token is null or app.security.token.user == 'anon.' %}นั่นเป็นวิธีที่ทำให้ฉันได้ผล
Sebastian G. Marinescu

98

แม้ว่าคำตอบปัจจุบันจะตอบคำถามของ OP แล้ว แต่ฉันต้องการเพิ่มรายละเอียดเพิ่มเติม

ฉันเข้าใจว่า OP ไม่ต้องการตรวจสอบบทบาท แต่ฉันกำลังรวมไว้เพื่อให้ผู้ใช้ SO รายอื่นสามารถคัดลอกและวางจากสิ่งนี้ได้ในอนาคต - ทุกครั้งที่ฉัน Google สิ่งนี้ฉันจบลงที่นี่!

Symfony Doc ที่มา:


ตรวจสอบว่ามีผู้ใช้เข้าสู่ระบบหรือไม่ (โดยไม่คำนึงถึงบทบาท)

ตามคำตอบคุณสามารถใช้app.userเพื่อตรวจสอบว่ามีผู้ใช้เข้าสู่ระบบหรือไม่

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

กำลังตรวจสอบสถานะการพิสูจน์ตัวตน

คุณสามารถใช้is_granted()วิธีการตรวจสอบROLES(ด้านล่างนี้เป็นบทบาททั้งหมดที่กำหนดโดย symfony คุณอาจมีบทบาทของคุณเอง(เพิ่มเติมด้านล่าง) )

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

จากเอกสาร:

IS_AUTHENTICATED_ANONYMOUSLY - กำหนดโดยอัตโนมัติให้กับผู้ใช้ที่อยู่ในส่วนที่มีการป้องกันไฟร์วอลล์ของไซต์ แต่ยังไม่ได้ลงชื่อเข้าใช้จริงซึ่งจะทำได้ก็ต่อเมื่อได้รับอนุญาตการเข้าถึงแบบไม่ระบุตัวตน

IS_AUTHENTICATED_REMEMBERED - กำหนดโดยอัตโนมัติให้กับผู้ใช้ที่ตรวจสอบสิทธิ์ผ่านคุกกี้จำฉัน

IS_AUTHENTICATED_FULLY - กำหนดโดยอัตโนมัติให้กับผู้ใช้ที่ให้รายละเอียดการเข้าสู่ระบบในระหว่างเซสชันปัจจุบัน


การตรวจสอบบทบาท

คุณยังสามารถใช้is_granted()เพื่อตรวจสอบบทบาท
สมมติว่าเรามี 3 บทบาท ( 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 %}

ดำเนินการด้านบนภายในคอนโทรลเลอร์

ดูคำตอบต่อไปนี้: จะตรวจสอบได้อย่างไรว่าผู้ใช้ล็อกอิน Symfony2 ภายในคอนโทรลเลอร์หรือไม่?


2
ฉันแค่อยากรู้ ... อะไร-%}และ{%-ย่อมาจากอะไร? ทำไมไม่%}และ{%?
V-Light

11
-ลบต่อท้ายทุกช่องว่างเพื่อที่จะอ่านได้มากขึ้นในแหล่งเบราว์เซอร์ ข้อมูลเพิ่มเติมที่นี่: twig.sensiolabs.org/doc/templates.html#whitespace-control
Anil

ยกโทษให้ฉันที่ทำให้คำถามเก่า ๆ นี้กลับมามีชีวิตอีกครั้ง แต่ฉันคิดว่าฉันอ่านที่ไหนสักแห่งที่แอพนั้นผู้ใช้จะไม่เป็นโมฆะสำหรับผู้ใช้ที่ไม่ระบุชื่อไม่ถูกต้องหรือ นั่นหมายความว่าตรวจสอบ app.user ไม่เพียงพอหรือไม่?
pzaj

@Anil symfony.com/doc/2.8/templating/app_variable.htmlพารามิเตอร์ที่สองอธิบายเป็นไปเช่นนั้นapp.user The value stored in this variable can be a UserInterface object, any other object which implements a __toString() method or even a regular string.ฉันจำไม่ได้ว่าฉันอ่าน app นั้นที่ไหนผู้ใช้ส่งกลับ "anon" สตริงน่าเสียดายและภายใต้สถานการณ์ใด
pzaj

1
@ user1970395 บรรทัดแรกในเอกสารอ่านThe representation of the current user or null if there is none.ดังนั้นมันจะเป็นโมฆะ บันเดิลของบุคคลที่สามสามารถส่งคืนสตริงได้หากUserInterfaceการใช้งานแบบกำหนดเองมี__toString()วิธีการที่เรียกเมื่อไม่ระบุตัวตน
Anil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.