2012-01-29 19 views
21

Oturum açma başarısı için use_referer: true numaralı bir parametre var. Giriş hatası için, aradığım şey sadece failure_path var.Oturum açma hatasından sonra nasıl yönlendiriciye geri dönülür?

İkinci bir şey: Nasıl yapılır ve hata mesajı nasıl iletilir?

Üçüncü şey: Nasıl oturum açtıktan sonra yönlendiriciye geri dönülür?

+0

neden başarısızlık yolu sadece giriş istemcisi değil miydi? – JamesHalsall

+1

çünkü her alt sayfadan giriş yapabilirim. Belirtilen URL'de bir giriş formum yok. Bu nedenle, başka bir kullanıcı profili sayfasından giriş yaparken kullanıcıyı ana sayfaya yönlendirmek istemiyorum. –

cevap

49

Bunu çözdüm.

Orada çözümdür: How to disable redirection after login_check in Symfony 2

ve burada benim sorunu çözer kod şudur:

form_login: 
    check_path: /access/login_check 
    login_path:/
    use_referer: true 
    failure_handler: authentication_handler 
logout: 
    path: /access/logout 
    target:/
    success_handler: authentication_handler 

ve yapılandırma için:

<?php 

namespace Acme\MainBundle\Handler; 

use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface; 
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface; 
use Symfony\Component\Security\Core\Exception\AuthenticationException; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\RedirectResponse; 

class AuthenticationHandler implements AuthenticationFailureHandlerInterface, LogoutSuccessHandlerInterface 
{ 
    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    {  
     $referer = $request->headers->get('referer');  
     $request->getSession()->setFlash('error', $exception->getMessage()); 

     return new RedirectResponse($referer); 
    } 

    public function onLogoutSuccess(Request $request) 
    { 
     $referer = $request->headers->get('referer'); 
     return new RedirectResponse($referer); 
    } 
} 

olaylar örneğin security.yml eklemek işlemek için .yml:

services: 
    authentication_handler: 
     class: Acme\MainBundle\Handler\AuthenticationHandler 
+4

$ request-> headers-> get ('referer'); bazen null döndürür (Firefox'ta çoğaltıldım). Bu çözüm güvenilir değildir, geri dönüş veya başka bir çözüm gereklidir. – Julien

+0

@ wojciech-kulik Aşağıdaki hatayı alıyorum: '' '$ request-> getSession() -> setFlash ('error', $ exception-> getMessage());' ' ' '' FatalErrorException: Hata: Tanımlanmamış yönteme çağrı Symfony \ Bileşen \ HttpFoundation \ Session \ Session :: setFlash() /var/www/symfony/src/Application/Sonata/UserBundle/Form/Handler/AuthenticationHandler.php satır 16''' – jcarlosweb

+0

@webyseo Muhtemelen Senfoninin farklı bir versiyonuna sahipsiniz ve flaş mesajlar farklı bir şekilde ayarlanmış. Belki de yardımcı olacaktır: http://stackoverflow.com/questions/13348534/symfony-2-setting-a-flash-message-outside-of-controller –

İlgili konular