2017-03-04 76 views
2

如何將用戶重定向到使用fosuserbundle在Symfony中登錄後訪問的最後一頁?Symfony - 如何將用戶重定向到登錄後訪問的最後一頁?

在我的控制器中,我首先檢查用戶是否登錄。如果他不是,我將他重定向到登錄頁面。這是我在控制器開始時使用的短代碼。

$autenthicated = $this->checkAuth(); 
if($autenthicated==true){ 
    return $this->render('MainBundle:Default:home.html.twig'); 
}else{ 
    return $this->redirect($this->generateUrl('login_connect')); 
} 

問題是,用戶登錄後,他被重定向到主頁而不是最後一頁訪問。

我應該如何將他重定向到我的自定義登錄頁面?顯然這是行不通的:

return $this->redirect($this->generateUrl('login_connect')); 

回答

2

你不必自己處理登錄路由的重定向。

如果您在控制器中輸入AccessDeniedException,安全組件會將您重定向到登錄頁面(您試圖訪問的頁面作爲參數)。

登錄後,本機LoginSuccessHandler會將您重定向到所需的頁面。

您也可以使用快捷Controller

$this->denyAccessUnlessGranted(['ROLE_USER']);// check your needed roles here 

如果你需要重寫登錄後重定向邏輯,你可以定義一個服務,並告訴安全組件來使用這一個來處理重定向。

這裏是一個虛擬的例子:
AppBundle/Security/LoginSuccessHandler.php

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface 
{ 

    // … 

    /** 
    * @param Request  $request 
    * @param TokenInterface $token 
    * @return RedirectResponse 
    */ 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     // your stuff 
     return new RedirectResponse($this->router->generate(‘custom_route’)); 
    } 
} 

服務配置:

# services.yml 
app.login_success_handler: 
     public: false 
     class: AppBundle\Security\LoginSuccessHandler 
     arguments: ["@security.token_storage", "@router"] 

配置爲使用自定義處理程序的安全組件

您與重定向邏輯PHP服務:

# security.yml 
security: 
    firewalls: 
     main: 
      form_login: 
       success_handler: app.login_success_handler 
+0

謝謝,事實上它更容易 – 118218

相關問題