在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是安全包配置页面,其中列出了所有选项,但我找不到任何关于我正在寻找的内容。
答案 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>
(删除了无关代码。)