2016-02-23 17 views
5

यदि मेरे पास एक सुरक्षित मार्ग है, तो मान लें कि panel नीचे से, सिम्फनी केवल उपयोगकर्ताओं में लॉग इन करने की अनुमति देगा।सिम्फनी सुरक्षा पृष्ठ पर लॉग इन करने के लिए रीडायरेक्ट

- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/panel, role: ROLE_USER } 

उन है कि यह लॉग इन नहीं हैं हमेशा login_path (मैं FOSUserBundle उपयोग कर रहा हूँ) के लिए उन्हें रीडायरेक्ट करेगा के लिए:

security: 
    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       login_path:  fos_user_security_login 

मैं कहां से अक्षम या इस अनुप्रेषित ओवरराइड कर सकते हैं? मैं उपयोगकर्ता को पुनर्निर्देशित किए बिना सीधे लॉगिन फॉर्म दिखाना चाहता हूं।

मुझे विश्वास है कि इसे AccessDeniedHandlerInterface के साथ करना है, लेकिन सुरक्षा.आईएमएल में किस कुंजी को अधिलेखित करने की आवश्यकता है? और डिफ़ॉल्ट कार्यान्वयन कहां है?

अन्य स्थितियों के लिए हमारे पास DefaultLogoutSuccessHandler, DefaultAuthenticationFailureHandler, DefaultAuthenticationSuccessHandler है और हम इन परिस्थितियों में से प्रत्येक के लिए एक सेवा लागू कर सकते हैं, जो उनके संबंधित इंटरफेस को बढ़ाता है और स्थिति को एक कस्टम तरीके से संभाल सकता है। AccessDenied के लिए कुछ भी नहीं मिल रहा है, यद्यपि। Its directory में केवल इंटरफ़ेस है।

+2

क्या लाभ है? उपयोगकर्ता में लॉग इन करने के बाद वापस/पैनल पर रीडायरेक्ट किया जाएगा और यह कोई अलग नहीं लगेगा - मुझे क्या याद आ रही है? – ccKep

+0

मैं कुछ मार्गों पर एक लॉगिन पेज जोड़ना चाहता हूं। उपयोगकर्ता पृष्ठ तक पहुंचना चाहता है लेकिन वह लॉग इन नहीं है इसलिए मैं उसे लॉगिन फॉर्म प्रस्तुत करता हूं और लॉगिन के बाद (AJAX के साथ) वह पैनल पर रीडायरेक्ट हो जाता है। एक लॉगिन फॉर्म दिखाने के लिए –

+0

आपको अनाम पहुंच भी देनी चाहिए। तो नियंत्रक में अनुमति की जांच करें उदाहरण के लिए – Heah

उत्तर

3

मैं इसे मैन्युअल रूप से करूँगा।

अपने मार्ग गुमनाम द्वारा पहुंच योग्य बनाएं: अगर वहाँ एक उपयोगकर्ता द्वारा प्रवेश

- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] } 

अपने टेम्पलेट में, जाँच:

{% if app.user is null %} 
    <!-- Then display your login form --> 
{% else %} 
    <!-- Display the normal view --> 
{% endif %} 

या नियंत्रक से यह कार्य करें:

if (!is_object($this->get('security.token_storage')->getToken()->getUser())) { 
    // Render the login form 
} 

इस तरह, आप इस तर्क के आधार पर अपना तर्क बना सकते हैं कि उपयोगकर्ता प्रमाणित है या नहीं।

+0

यह मानते हुए कि उपयोगकर्ता पैनल पेज तक पहुंचना चाहता है और उसे उस पृष्ठ पर रीडायरेक्ट किया जाता है जहां मैं लॉगिन फॉर्म (एजेक्स के साथ लिया और मान्य) प्रदर्शित करता हूं, मुझे कैसे पता चलेगा कि लॉगिन के बाद उपयोगकर्ता को कौन सा पृष्ठ रीडायरेक्ट करना है (इस मामले में) और मुझे कैसे पता चलेगा कि उपयोगकर्ता शुरू में लॉगिन करना चाहता था या नहीं (लॉगिन फॉर्म एक मॉडल है और सामग्री AJAX के साथ पुनर्प्राप्त की जाती है)? –

+0

आपके प्रश्न में आप कह रहे हैं कि आप उपयोगकर्ता को रीडायरेक्ट नहीं करना चाहते हैं, केवल लॉगिन फॉर्म प्रदर्शित करें। यह जानने के लिए कि आपका उपयोगकर्ता किस पृष्ठ तक पहुंचने का प्रयास करता है, 'app.request.headers.get (' referer ')' twig से ''this-> getRequest() -> हेडर-> प्राप्त करें (' रेफरर ')' नियंत्रक से ' । फिर, यदि आप लॉगिन के बाद रेफरर पर रीडायरेक्ट करना चाहते हैं, तो '_target_path' को फॉर्म फ़ील्ड के रूप में जोड़ें, इसे पुनर्प्राप्त रेफरर से भरें और विधि में रीडायरेक्शन करें जो आपके फॉर्म को संभालता है (यदि आपका फॉर्म FOSUser द्वारा प्रबंधित किया गया है, तो '_target_path 'स्वचालित रूप से इस्तेमाल किया जाएगा)। यदि आपको एक उदाहरण की आवश्यकता है तो मैं त्वरित संपादन कर सकता हूं। – chalasr

+0

अच्छा विचार, करेंगे। –

संबंधित मुद्दे