2013-11-14 60 views
3

後重定向的AuthenticationSuccessHandler至極我的網站上實現了一個重定向當通過fosuserbundle或fosfacebookbundle用戶登錄。當用戶完成配置文件時,重定向會發生變化,如果它已完成,我希望將他重定向到之前的位置,這就是我使用referer變量的原因。AuthenticationSuccessHandler,我剛剛加入這個論壇的幫助下登錄和引薦

 
    namespace Me\MyBundle\Handler; 

    use Symfony\Component\Security\Http\HttpUtils; 
    use Symfony\Component\HttpFoundation\RedirectResponse; 
    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; 
    use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler; 


    class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler { 

     protected $router; 

     public function __construct(HttpUtils $httpUtils, array $options, $router) { 
     $this->router = $router; 
      parent::__construct($httpUtils, $options); 
     } 

     public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 

     $user = $token->getUser(); 

     if($user->getProfileComplete()!=1){ 
    //redirects to profile editing 
      $url = 'fos_user_profile_edit'; 
     }else{ 
      $referer = $request->headers->get('referer'); 
      if($referer == NULL){ 
    //redirects to custom url if there is not any referer 
       $url = 'My_customurl'; 
      }else{ 
    //redirects to the referer 
       $url = $referer; 
      } 
     } 

     return new RedirectResponse($this->router->generate($url)); 
     } 
    } 

我security.yml請注意我的use_referer中聲明這兩個fos_facebook和form_login:

 
firewalls: 
     main: 
      pattern: ^/ 
      fos_facebook: 
       app_url: "http://apps.facebook.com/app" 
       server_url: "http://www.app.com" 
       login_path: /user/login 
       check_path: /facebook/login_check 
       provider: fos_facebook_provider 
       success_handler: my_auth_success_handler 
       use_referer: true 
      form_login: 
       provider: fos_userbundle 
       csrf_provider: form.csrf_provider 
       login_path: /user/login 
       check_path: /user/login_check 
       use_forward: false 
       success_handler: my_auth_success_handler 
       use_referer: true 
       failure_path: null 
      logout: 
       path: /user/logout 
      anonymous: ~ 
      remember_me: 
        key:  mySuperKey 
        lifetime: 4147200 
        path: /
        domain: ~ 

當我登錄,我沒有我的個人資料完成後,我得到重定向成功地但當它已完成並且引用者不爲空我有500個錯誤:

當我使用Facebook登錄時,出現500錯誤:「無法生成指定路由的URL」http://app.com/app_dev.php/user/login「因爲此類路由不存在」。並在Firefox中的url是這樣的:「http://app.com/app_dev.php/facebook/login_check

而當我登錄窗體,我得到一個500錯誤:「無法生成指定路由的URL」http://app.com/app_dev.php/user/login「,因爲這樣的路由不存在。而在Firefox的URL是這樣的:「http://app.com/app_dev.php/user/login_check

任何想法,我越來越瘋狂。我的事情了,因爲轉診已存儲的用戶/登錄,當它去login_check進入用戶/再次登錄...

預先感謝您!

回答

3

您正在嘗試使用實際的網址生成路線,而不是路線名稱。試試這個代碼:

if ($user->getProfileComplete() != 1) { 
    $url = $this->router->generate('fos_user_profile_edit'); 
} else { 
    $referer = $request->headers->get('referer'); 
    if ($referer == NULL) { 
     $url = $this->router->generate('My_customurl'); 
    } else { 
     $url = $referer; 
    } 
} 

return new RedirectResponse($url); 
+0

Yeahh!它正在工作,但它將我重定向到登錄頁面,一旦驗證(用戶/登錄)而不是前一個。我認爲這是因爲在引用變量設置登錄(這是我訪問過的最後一個)有什麼方法可以解決這個問題嗎?感謝:-) :-) :-) – walolinux

+0

嘗試'$引薦= $請求 - >的getSession() - >獲取( '_安全。' $這個 - > providerKey 'target_path。',NULL);' – Ziumin

+0

越來越null因爲重定向到My_customurl我已經看到這篇文章,但我無法得到它的工作:http://stackoverflow.com/questions/16079592/how-does-symfony2-redirect-to-requested-page-after -login – walolinux

相關問題