Symfony-如何将用户重定向到登录后访问的最后一页?

Symfony-如何将用户重定向到登录后访问的最后一页?,symfony,fosuserbundle,symfony-security,Symfony,Fosuserbundle,Symfony Security,如何将用户重定向到使用fosuserbundle登录Symfony后访问的最后一页 在我的控制器中,我首先检查用户是否已登录。如果他没有,我会将他重定向到登录页面。以下是我在控制器开始时使用的简短代码 $autenthicated = $this->checkAuth(); if($autenthicated==true){ return $this->render('MainBundle:Default:home.html.twig'); }else{ return $th

如何将用户重定向到使用fosuserbundle登录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'));

您不必自己处理登录路由的重定向

如果您在控制器中抛出一个
AccessDeniedException
,安全组件会将您重定向到登录页面(您尝试访问的页面作为参数)

登录后,本机LoginSAccessHandler会将您重定向到所需页面

您还可以使用
控制器
快捷方式:

$this->denyAccessUnlessGranted(['ROLE_USER']);// check your needed roles here 
如果需要在登录后覆盖重定向逻辑,可以定义一个服务并告诉安全组件使用此服务来处理重定向

下面是一个虚拟示例:

带有重定向逻辑的php服务:
AppBundle/Security/loginsucesshandler.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"]
配置安全组件以使用自定义处理程序:

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

谢谢你,确实那样容易多了