如何重定向在symfony中,如何在身份验证后重定向到身份验证之前的URL?

时间:2019-05-08 07:45:49

标签: php symfony

我希望用户登录(登录页面)并重定向到他们在身份验证之前所在的页面。

有关信息,我使用make:auth命令创建了登录页面,并且重定向(在代码中)是在AppAuthenticator类的此代码中完成的:

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    return new RedirectResponse($this->urlGenerator->generate('page_to_redirect'));
}

2 个答案:

答案 0 :(得分:0)

您似乎正在使用GuardAuthenticator。在这种情况下,您可以使用TargetPathTrait从会话中获取目标路径。

use TargetPathTrait;

...

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    $targetPath = $this->getTargetPath($request->session, $providerKey);

    return new RedirectResponse($targetPath);
}

您可能还希望提供一个备用广告,例如返回首页或从其他位置(例如从您可以设置的其他url查询参数中获取,或者如果您enable use_referer in your firewall也可以从标题中读取。

由于目标路径不是路由名称,因此不需要使用UrlGenerator来检索该路由名称的路径。

答案 1 :(得分:0)

感谢您的回答。我尝试了您的解决方案,但又遇到了另一个问题。实际上,我找到了解决方案: 当我进入控制器时(登录之前),我将重定向路径存储在会话中:

>     /**
>      * @Route("/blog", name="blog")
>      */
>     public function blog(Request $request)
>     {
>         $request->getSession()->set("referer","blog");
>         return $this->render('main/blog.html.twig', [
>             'controller_name' => 'MainController',
>         ]);
>     }

在AppAuthenticator.php中,我使用引荐来源获取数据:

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) {
    $url = $request->getSession()->get('referer');
    return new RedirectResponse($this->urlGenerator->generate($url));

}
相关问题