2012-02-01 11 views
7

मैं अपने सुरक्षा फ़ाइल के रूप में निम्नानुसार कॉन्फ़िगर किया है। मैं मुख्य रूप से अपने नियंत्रकों पर जेसन के साथ प्रतिक्रिया दे रहा हूं इसलिए मैं प्रतिबंधित यूआरएल जैसे {"error": "Access denied"} पर एक चेतावनी दिखाना चाहता हूं। अगर मैं login_path: /public/login कोड निकालता हूं तो यह एक डिफ़ॉल्ट यूआरएल/लॉगिन पर रीडायरेक्ट करता है। इसे रीडायरेक्ट करने से रोकने के लिए मैं कैसे करूँ?symfony2 कोई प्रतिबंधित क्षेत्रों पर अनुप्रेषित

+1

मैं एक ही बात करना चाहता हूँ -

namespace Your\NameSpace\Bundle\Listener; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class AjaxAuthenticationListener { /** * Handles security related exceptions. * * @param GetResponseForExceptionEvent $event An GetResponseForExceptionEvent instance */ public function onCoreException(GetResponseForExceptionEvent $event) { $exception = $event->getException(); $request = $event->getRequest(); if ($request->isXmlHttpRequest()) { if ($exception instanceof AuthenticationException || $exception instanceof AccessDeniedException || $exception instanceof AuthenticationCredentialsNotFoundException) { $responseData = array('status' => 401, 'msg' => 'User Not Authenticated'); $response = new JsonResponse(); $response->setData($responseData); $response->setStatusCode($responseData['status']); $event->setResponse($response); } } } } 

आप श्रोता के लिए एक सेवा बनाना होगा। किसी भी तरह, मुझे सिम्फनी नहीं मिलती है ... क्या यह असामान्य अनुरोध ** प्रमाणीकरण के साथ AJAX नियंत्रक ** लिखता है? – apfelbox

उत्तर

0

this page पूर्ण security.yml कॉन्फ़िगरेशन संदर्भ के लिए देखें। इसके अलावा, this is an even better reference प्रत्येक कुंजी के स्पष्टीकरण के साथ।

मैं उपयोगकर्ता को लॉगिन करने की आवश्यकता होने पर JSON लौटने को संभालने के लिए अपनी खुद की श्रोता कक्षा बनाने का सुझाव दूंगा। उदाहरण: https://gist.github.com/1015146

+0

आपके द्वारा पोस्ट किए गए लिंक काम नहीं कर रहे हैं, कृपया उन्हें –

+1

अपडेट करें @ TomášTibenský - निश्चित। – leek

6

आप की तरह मैंने किया था कर सकते हैं: routing.yml

access_denied: 
    path: /error403 
    defaults : 
     _controller: FrameworkBundle:Template:template 
     template: 'DpUserBundle:Static:error403.html.twig' 

में security.yml

firewalls: 
     administrators: 
      pattern: ^/ 
      form_login: 
       check_path: _security_check 
       login_path: _security_login 
      logout: true 
      security: true 
      anonymous: true 
      access_denied_url: access_denied 

में बस फ़ायरवॉल अनुभाग में जोड़ें * access_denied_url * परम

9

आपको श्रोता बनाने की आवश्यकता है और फिर अपनी प्रतिक्रिया ट्रिगर करें। https://gist.github.com/xanf/1015146

श्रोता कोड - - मेरी समाधान पर आधारित है

e_ent_int_baems.ajaxauthlistener: 
    class: Your\NameSpace\Bundle\Listener\AjaxAuthenticationListener 
    tags: 
     - { name: kernel.event_listener, event: kernel.exception, method: onCoreException, priority: 1000 } 
+1

मुझे भावी पाठकों के लिए जोड़ने की अनुमति दें: - सिम्फनी \ घटक \ सुरक्षा \ Http \ फ़ायरवॉल \ ExceptionListener :: onKernelException() पर एक नज़र डालें जो डिफ़ॉल्ट सिम्फनी कार्यान्वयन है- –

+0

धन्यवाद !!! यह वही है जो मुझे चाहिए :) –

+0

в "$ प्रमाणीकरण प्रमाण पत्रों का अपवाद उदाहरण नॉटफाउंड अपवाद" нет необходимости, ибо оно наследует "प्रमाणीकरण अपवाद" – bfday

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