Symfony - 如何将用户重定向到登录后访问的最后一页?
Symfony - How to redirect the user to last page visited after login?
如何在使用 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
,安全组件会将您重定向到登录页面(将您尝试访问的页面作为参数)。
登录后,本机 LoginSuccessHandler 会将您重定向到所需页面。
您还可以使用 Controller
快捷方式:
$this->denyAccessUnlessGranted(['ROLE_USER']);// check your needed roles here
如果您需要在登录后覆盖重定向逻辑,您可以定义一个服务并告诉安全组件使用该服务来处理重定向。
这是一个虚拟示例:
您的 php 具有重定向逻辑的服务:
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"]
配置安全组件以使用您的自定义处理程序:
# security.yml
security:
firewalls:
main:
form_login:
success_handler: app.login_success_handler
如何在使用 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
,安全组件会将您重定向到登录页面(将您尝试访问的页面作为参数)。
登录后,本机 LoginSuccessHandler 会将您重定向到所需页面。
您还可以使用 Controller
快捷方式:
$this->denyAccessUnlessGranted(['ROLE_USER']);// check your needed roles here
如果您需要在登录后覆盖重定向逻辑,您可以定义一个服务并告诉安全组件使用该服务来处理重定向。
这是一个虚拟示例:
您的 php 具有重定向逻辑的服务:
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"]
配置安全组件以使用您的自定义处理程序:
# security.yml
security:
firewalls:
main:
form_login:
success_handler: app.login_success_handler