Redirect Symfony2自定义身份验证SuccessHandler和用户重定向
在中,已阐明了如何在登录Symfony2应用程序后执行代码。特别是,解决方案是编写一个Redirect Symfony2自定义身份验证SuccessHandler和用户重定向,redirect,login,symfony,Redirect,Login,Symfony,在中,已阐明了如何在登录Symfony2应用程序后执行代码。特别是,解决方案是编写一个AuthenticationHandler,它实现接口authenticationsuccesshandler接口 声明,在来自interfaceAuthenticationSuccessHandlerInterface的函数onAuthenticationSuccess()中,必须指定用户登录后将重定向到的uri 默认情况下,当用户尝试访问安全区域(即第X页)时,Symfony2会将用户重定向到登录页。登录成
AuthenticationHandler
,它实现接口authenticationsuccesshandler接口
声明,在来自interfaceAuthenticationSuccessHandlerInterface
的函数onAuthenticationSuccess()
中,必须指定用户登录后将重定向到的uri
默认情况下,当用户尝试访问安全区域(即第X页)时,Symfony2会将用户重定向到登录页。登录成功后,用户将被重定向到安全页面X。因此,登录后没有唯一的页面(例如主页)
如何使用
onAuthenticationSuccess()
函数将用户重定向到第X页?我实现了这个解决方案。
1) 将URI保存在每个访问页面的会话中(登录页面除外)。
2) 在onAuthenticationSuccess()
函数中加载URI,以在重定向响应()中返回它
要完成第1点),需要两个步骤:
(一)
假设已定义基本模板,将以下代码放在您想要的位置(例如,也放在
标记之前):
{% block setcurrenturi %}
{{ setCurrentURI(app.session, app.request.uri) }}
{% endblock %}
此代码要求在您的细枝扩展中定义一个函数(假设您实现了细枝扩展)。该函数非常简单:
public static function setCurrentURI($session, $URI) {
$session->set('LAST_URI', $URI);
}
然后,转到登录表单页面的细枝模板,并将块重新定义为:
{% block setcurrenturi %}
{% endblock %}
这样,登录页面的URI就不会保存在会话中
现在,在onAuthenticationSuccess()
函数中输入以下行:
return new RedirectResponse($request->getSession()->get('LAST_URI'));
是的,但这样我就不会得到目标URI,只得到起始URI。最好也能得到最终URI。想想一个匿名用户,他点击了一个需要登录的按钮。实际上,用户点击按钮,然后它被发送到登录页面,最后它被发送回按钮页面:按钮操作不是p已执行,用户必须再次按下。