例如,用户转到“关于我”页面。从这个页面,他可以通过导航栏中的按钮登录或注销。
当用户登录或注销时,他会自动重定向到主页。相反,我想将用户重定向到上一页(本例中的“关于我”)
阅读文档后,我找不到/不了解如何为我的目的配置重定向
有人可以解释/给我看:?谢谢你 !
例如,用户转到“关于我”页面。从这个页面,他可以通过导航栏中的按钮登录或注销。
当用户登录或注销时,他会自动重定向到主页。相反,我想将用户重定向到上一页(本例中的“关于我”)
阅读文档后,我找不到/不了解如何为我的目的配置重定向
有人可以解释/给我看:?谢谢你 !
public function login(AuthenticationUtils $authenticationUtils, Request $request): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
'back_to_your_page' => $request->headers->get('referer')
]);
}
然后在 Twig 页面 (login.html.twig) 中使用back_to_your_page登录表单中的变量。_target_path变量在这里是必不可少的。
<form>
...
<input type="hidden" name="_target_path" value="{{ back_to_your_page }}"/>
...
</form>
现在是最后一部分。在onAuthenticationSuccess函数所在的 LoginFormAuthenticator (make:auth) 中,您使用该_target_path变量。
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
return new RedirectResponse($request->get('_target_path'));
}
测试和享受。我知道这是一个迟到的回应,但也许其他人将来会得到帮助。
你没有提供关于你的实现的信息,所以我会假设你正在使用 Symfony4 表单验证器。所以基本上你有一个类为你处理身份验证的每个阶段(你使用make:auth从命令行生成)。
首先,查看这个 Symfony 文档页面,他们解释了如何构建基本身份验证。在这个页面的底部,他们实际上更详细地提到了我在这里描述的内容。
当您注销并单击登录(或尝试进入受限页面)时,Symfony 在重定向到登录页面之前,会将当前 URL 保存到会话中。您需要在onAuthenticationSuccess()方法中访问此值。
为此,在类的顶部添加使用 TargetPathTrait :
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
use TargetPathTrait;
//...class methods
}
现在您可以使用getTargetPath()方法,该方法使用会话和提供者键来获取所需的值:
class LoginFormAuthenticator extends AbstractFormLoginAuthenticator
{
//[...]
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->router->generate('homepage'));
}
//[...]
}
请注意,targetPath 实际上可以为空。例如,如果用户直接进入登录路径,就会发生这种情况。在这种情况下,您可以将用户重定向到例如主页。