登录后的Symfony重定向

时间:2016-04-30 19:10:13

标签: symfony

在Symfony2 / 3项目中,如果匿名用户位于半受保护的页面上(页面的某些部分仅显示给已登录的用户),他们会点击一个“登录查看”链接更多细节',如何在登录后将其重定向到他们所在的页面?

这与他们点击指向完全受保护页面的链接不同,因为Symfony安全框架会自动处理重定向。

是否内置了这样的东西,还是我必须添加它?我正在考虑在名为redirect的登录页面的链接末尾添加一个查询参数。例如,在Twig中,

<a href="{{ path('login_route', {'redirect': '/profile/123'}) }}">
    Sign in to view more details
</a>

将呈现为

<a href="/user/login?redirect=/profile/123">Sign in to view more details</a>

如果此功能尚不存在,我知道我必须向loginCheckAction中的LoginController添加内容(目前尚未使用,因为该路由由安全系统),但我不确定如何。

Here是安全包配置页面,其中列出了所有选项,但我找不到任何关于我正在寻找的内容。

3 个答案:

答案 0 :(得分:1)

您应该为安全捆绑包的登录成功事件添加一个侦听器,或者,扩展捆绑包并在其中实现您自己的登录操作 (documentation

答案 1 :(得分:0)

您可以在app / config / security.yml中使用“default_target_path” 看看这些文档:http://symfony.com/doc/current/cookbook/security/form_login.html

答案 2 :(得分:0)

尽管克鲁科夫的回答并没有解决我的问题,但它确实引导我朝着正确的方向前进。如documentation中所述,您可以在登录表单中添加name属性为_target_path的隐藏表单输入,并尝试重定向到此输入的值

所以在我的LoginController :: loginAction中,我检查了是否存在redirect查询参数,如果存在,则将其发送到树枝模板并添加隐藏输入:

public function loginAction(Request $request)
{
    $page = $this->templating->render('AppBundle::login.html.twig', [
        'redirect' => $request->query->get('redirect') ?: null,
    ]);

    return new Response($page);
}

在模板中:

<form action="{{ path('login_check') }}" method="post">
    {% if redirect %}
        <input name="_target_path" type="hidden" value="{{ redirect }}">
    {% endif %}

    <label for="username">Username</label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" required>

    <label for="password">Password</label>
    <input type="password" id="password" name="_password" required>

    <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
    <button type="submit">Sign in</button>
</form>

(删除了无关代码。)