2011-12-28 11 views
5

संभव डुप्लिकेट:
Symfony2 AJAX Loginकॉलिंग डिफ़ॉल्ट प्रबंधक

मैं के रूप में यहाँ का सुझाव दिया, AJAX लॉगिन अनुरोधों को हैंडल करने के लिए एक कस्टम प्रमाणीकरण हैंडलर सेवा को लागू किया है: https://stackoverflow.com/a/8312188/267705

लेकिन मैं सामान्य लॉगिन अनुरोधों को कैसे प्रबंधित कर सकता हूं? डिफ़ॉल्ट व्यवहार को कॉल करना अच्छा लगेगा, लेकिन मुझे नहीं पता और यह नहीं मिला कि यह कैसे किया जाए।

+0

* हैंडल * से आपका क्या मतलब है? –

+0

प्रश्न में दिए गए लिंक को देखें, मेरा मतलब शून्य और बयान है। –

+0

ठीक है, मैंने उस उत्तर को लिखा है जिसे आप लिंक कर रहे हैं। ;) जो मैं समझ नहीं पा रहा हूं वह है * शब्द * हैंडल * से आपका क्या मतलब है। तकनीकी विवरण के बिना आपका उपयोग केस क्या है? –

उत्तर

6

इस तरीके प्राप्त करने के लिए आप क्या चाहते हैं में से एक है:

namespace YourVendor\UserBundle\Handler; 

// "use" statements here 

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
      AuthenticationFailureHandlerInterface 
{ 
    private $router; 

    public function __construct(Router $router) 
    { 
     $this->router = $router; 
    } 

    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     if ($request->isXmlHttpRequest()) { 
      // Handle XHR here 
     } else { 
      // If the user tried to access a protected resource and was forces to login 
      // redirect him back to that resource 
      if ($targetPath = $request->getSession()->get('_security.target_path')) { 
       $url = $targetPath; 
      } else { 
       // Otherwise, redirect him to wherever you want 
       $url = $this->router->generate('user_view', array(
        'nickname' => $token->getUser()->getNickname() 
       )); 
      } 

      return new RedirectResponse($url); 
     } 
    } 

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    { 
     if ($request->isXmlHttpRequest()) { 
      // Handle XHR here 
     } else { 
      // Create a flash message with the authentication error message 
      $request->getSession()->setFlash('error', $exception->getMessage()); 
      $url = $this->router->generate('user_login'); 

      return new RedirectResponse($url); 
     } 
    } 
} 

का आनंद लें। ;)

+0

मुझे एक त्रुटि है जब मैं प्रमाणीकरण विफलता पर 'user_login' मार्ग उत्पन्न करता हूं। जो भी मैं कोशिश करता हूं (लॉगिन, login_path, user_login), मार्ग उत्पन्न होने में विफल रहता है और मेरे पास "रूट मौजूद नहीं है" त्रुटि है। इस मार्ग को कॉन्फ़िगर किया जा रहा है? इसे उत्पन्न करने के लिए मैं इसे कैसे संशोधित कर सकता हूं? –

+0

@ गैब्रिएलरहेरॉन, यह एक सामान्य मार्ग है जिसे आप सामान्य कार्यों के लिए परिभाषित करते हैं। [परंपरागत लॉगिन फॉर्मों पर अनुभाग] पढ़ें (http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form)। –

+0

आपके उत्तर के लिए धन्यवाद, मैं FOSUserBundle का उपयोग कर रहा हूं, और मुझे लगता है कि यह इस मार्ग को 'fos_user_security_login' का उपयोग करने के लिए ओवरराइड करता है। यह एकमात्र रास्ता है जो मेरे लिए काम करता है। –

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