2011-12-28 13 views
5

Olası Çoğalt: Burada önerildiği gibi ben AJAX giriş isteklerini işlemek için özel bir kimlik doğrulama işleyicisi hizmetini hayata geçirdik
Symfony2 AJAX LoginArama varsayılan işleyici

: https://stackoverflow.com/a/8312188/267705

Ama Normal giriş isteklerini nasıl ele alabilirim? Varsayılan davranışı çağırmak güzel olurdu, ancak bilmiyorum ve nasıl yapılacağını bulamadım.

+0

Tam olarak ne demek * handle *? –

+0

Sorudaki bağlantıya bakın, diğer boşluk ifadelerini kastediyorum. –

+0

Peki, bağlandığınız cevabı yazdım. ;) Anlamadığım şey, * tutamaç * kelimesi ile kastettiğiniz şeydir. Teknik detaylar olmadan kullanım durumunuz nedir? –

cevap

6

Bu İstediğinizi elde etmek yollarından biridir:

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); 
     } 
    } 
} 

keyfini çıkarın. ;)

+0

Kimlik doğrulama hatası durumunda 'user_login' yolunu oluşturduğumda bir hatam var. Denediğim her şey (login, login_path, user_login), yolun oluşturulamaması ve "Rota yok" hatası aldım. Bu rota nerede yapılandırılıyor? Oluşturulabilmesi için bunu nasıl değiştirebilirim? –

+0

@GabrielTheron, olağan eylemler için tanımladığınız normal bir yoldur. [Traditinal giriş formları] bölümünü okuyun (http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form). –

+0

Cevabınız için teşekkürler, FOSUserBundle kullanıyorum ve bunun yerine 'fos_user_security_login' kullanmak için bu yolu geçersiz kıldığını düşünüyorum. Benim için çalışan tek yol bu. –

İlgili konular