सिम्फनी 2: यदि कोई उपयोगकर्ता किसी टेम्प्लेट के अंदर लॉग इन नहीं है तो मैं कैसे जांच करूं?


101

सिम्फनी 2 टेम्प्लेट (टहनी का उपयोग करके) में, मैं प्रभावी रूप से कैसे जांच सकता हूं कि कोई उपयोगकर्ता लॉग इन नहीं है?

मैं ROLEचेक का उपयोग नहीं करना चाहता । मैं एक सीधा तरीका चाहता हूं कि अगर कोई उपयोगकर्ता लॉग इन नहीं है, तो जांच लें।

मुझे पता है कि कामों के app.user.usernameसाथ तुलना करना anon, लेकिन यह सिर्फ मुझे सही नहीं लगता।

जवाबों:


190

आप देख सकते हैं कि 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
@ रॉनन {% if is_granted('IS_AUTHENTICATED_FULLY') %}केवल तभी लौटेगा जब उपयोगकर्ता चालू सत्र में प्रमाणित हो जाएगा। यदि उपयोगकर्ता मुझे याद रखें कुकी के माध्यम से प्रमाणित होता है तो यह गलत होगा। उपयोग करना {% if app.user %}सही है, अगर कोई उपयोगकर्ता प्रमाणित होने के बावजूद सही लौटना चाहता है।
RayOnAir

@ रॉनन, कि यह निम्न त्रुटि के रूप में काम नहीं करता है: कोई भी प्रमाणीकरण प्रदाता "सिम्फनी \ घटक \" सुरक्षा / कोर \ ऑथेंटिकेशन \ टोकन / प्रीऑनथेंटेड टोकन के वर्ग के लिए नहीं मिला।
हेरोल्ड

{% if app.security.token is null or app.security.token.user == 'anon.' %}इस तरह मुझे यह मेरे लिए काम कर रहा है
सेबस्टियन जी। मरीनस्क्यू

98

यद्यपि वर्तमान उत्तर ओपी के प्रश्न का उत्तर देता है, मैं अधिक विवरण जोड़ना चाहूंगा।

मैं समझता हूं कि ओपी भूमिकाओं की जांच नहीं करना चाहते थे, लेकिन मैं उनमें शामिल हूं ताकि अन्य एसओ उपयोगकर्ता भविष्य में इससे कॉपी और पेस्ट कर सकें। - हर बार जब मैं यह Google करता हूं, तो मैं यहां समाप्त होता हूं!

सिम्फनी डॉक्टर के स्रोत:


जांचें कि क्या कोई उपयोगकर्ता लॉग इन करता है (भूमिका की परवाह किए बिना)

जैसा कि उत्तर दिया गया है, आप 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, (नीचे सभी भूमिकाएँ सिम्फनी द्वारा सौंपी गई हैं, आपकी अपनी भूमिकाएँ भी हो सकती हैं) (नीचे और अधिक )

{% 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
मैं बस उत्सुक हूँ ... क्या -%}और किस {%-लिए खड़ा हूँ ? क्यों नहीं %}और {%?
वी-लाइट

11
-सभी पिछली श्वेत रिक्ति को इतना है कि यह ब्राउज़र स्रोत स्रोत में अधिक पठनीय है निकालता है। यहां अधिक जानकारी: twig.sensiolabs.org/doc/templates.html#whitespace-control
Anil

मुझे इस पुराने प्रश्न को फिर से जीने के लिए क्षमा करें, लेकिन मुझे लगता है कि मैंने कहीं पढ़ा है कि app.user अनाम उपयोगकर्ताओं के लिए अशक्त नहीं होगा, क्या यह सही नहीं है? क्या इसका मतलब यह नहीं होगा कि app.user के लिए जाँच पर्याप्त नहीं है?
पहलाज

@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.। मुझे याद नहीं है कि मैं उस ऐप को कहां पढ़ता हूं। दुर्भाग्य से और किन परिस्थितियों में।
पजज

1
@ user1970395 डॉक्स में पहली पंक्ति पढ़ी जाती है The representation of the current user or null if there is none., इसलिए यह अशक्त होगी। यदि कस्टम UserInterfaceकार्यान्वयन की एक __toString()विधि है जिसे अनाम कहा जाता है, तो एक तृतीय पक्ष बंडल एक स्ट्रिंग लौटा सकता है ।
अनिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.