Symfony 4,如何在登录(或注销)后将用户重定向到上一页?

时间:2019-06-17 11:28:10

标签: symfony4

通过示例,用户转到“关于我”页面。在此页面上,他可以通过导航栏中的按钮登录或注销。

当用户登录或注销时,他将自动重定向到主页。相反,我想将用户重定向到上一页(在此示例中为“关于我”)

阅读文档后,我不了解/不知道如何为自己的目的确定重定向

有人可以向我解释/告诉我吗?谢谢 !

2 个答案:

答案 0 :(得分:0)

您没有提供有关实现的信息,因此我假设您正在使用Symfony4表单身份验证器。因此,基本上,您有一个为您处理身份验证各个阶段的类(您是使用 make:auth 从命令行生成的)。

首先,查看THIS Symfony doc page,他们在其中解释如何构建基本身份验证。在页面底部,他们实际上提到了我在这里描述的内容。

注销后,单击登录(或尝试进入受限页面),在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实际上可以为空。例如,如果用户直接进入登录路径,则会发生这种情况。在这种情况下,您可以例如将用户重定向到首页。

答案 1 :(得分:0)


我也遇到了这个问题。
我假设您使用“ Symfony4.4”并使用“ make:auth”来创建登录界面。 在您的“ SecurityController”(具有登录路径的那个)中,使用“ $ request-> headers-> get('referer')”`将您来自的URL传递给树枝登录页面。
sudo supervisorctl stop all

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start all

然后在Twig页面(login.html.twig)中,在登录表单中使用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') ]); } 变量。 back_to_your_page变量在这里至关重要。

_target_path

现在是最后一部分。在<form> ... <input type="hidden" name="_target_path" value="{{ back_to_your_page }}"/> ... </form> 函数所在的LoginFormAuthenticator(make:auth)中,使用onAuthenticationSuccess变量。

_target_path

测试并享受。我知道这是一个较晚的响应,但将来可能会有其他人得到帮助。