我希望用户登录(登录页面)并重定向到他们在身份验证之前所在的页面。
有关信息,我使用make:auth
命令创建了登录页面,并且重定向(在代码中)是在AppAuthenticator
类的此代码中完成的:
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
return new RedirectResponse($this->urlGenerator->generate('page_to_redirect'));
}
答案 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)); }