後重定向的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進入用戶/再次登錄...
預先感謝您!
Yeahh!它正在工作,但它將我重定向到登錄頁面,一旦驗證(用戶/登錄)而不是前一個。我認爲這是因爲在引用變量設置登錄(這是我訪問過的最後一個)有什麼方法可以解決這個問題嗎?感謝:-) :-) :-) – walolinux
嘗試'$引薦= $請求 - >的getSession() - >獲取( '_安全。' $這個 - > providerKey 'target_path。',NULL);' – Ziumin
越來越null因爲重定向到My_customurl我已經看到這篇文章,但我無法得到它的工作:http://stackoverflow.com/questions/16079592/how-does-symfony2-redirect-to-requested-page-after -login – walolinux