登录后Symfony重定向
在Symfony2/3项目中,如果匿名用户位于半保护页面上(其中页面的部分内容仅显示给登录用户),并且他们单击一个链接,指出“登录查看更多详细信息',我如何将它们重定向到登录后所在的页面?登录后Symfony重定向
由于Symfony安全框架自动处理重定向,这与他们点击完全受保护页面的链接时不同。
有没有像这样的内置内容,或者我将不得不添加它?我正在考虑在登录页面的链接末尾添加一个查询参数,名称为redirect
。例如,在嫩枝,
<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>
如果此功能已经不存在了,我知道我将不得不在LoginController
添加一些东西到loginCheckAction
(其目前没有被使用,因为路由是由安全系统处理的),但我不知道如何。
Here是Security Bundle的配置页面,其中列出了所有的选项,但是我找不到任何关于我在找什么的东西。
尽管Krukov的回答并没有解决我的问题,但确实让我朝着正确的方向前进。如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>
(多余代码删除。)
您应该添加一个监听器登录您的安全包的成功事件,或者,或者扩展包和实现自己的登录动作里面 (documentation)
这似乎对我的需要过于复杂。我遇到了一个可能更简单的解决方案(请参阅我对Krukov的回答的评论),我将尝试。 – user128216
您可以直接在应用程序中使用“default_target_path”/config/security.yml 看看这些文档:http://symfony.com/doc/current/cookbook/security/form_login.html
不,这不是我要找的。我不希望这种行为发生在每次登录时,只是在某些情况下。但是阅读那个文档页面,我偶然发现了一个潜在的解决方案。如果名为'_target_path'的隐藏字段被添加到登录表单中,它将覆盖默认的重定向。因此,我所要做的就是在'LoginController :: LoginAction'函数中检查是否有一个名为'redirect'的查询参数,如果存在,则将隐藏的'_target_path'输入添加到登录表单中。我明天就试试,如果有效,请将其作为自我回答。 – user128216
请注意,这不是傻瓜。如果用户输入正确的用户名和密码,它就可以工作。但是,如果他们输入错误,那么它会跳回到登录页面并显示一条错误消息 - 但重定向查询参数已消失。 – user128216