[英]Symfony2 - AuthenticationSuccessHandler redirect to original request
[英]Symfony2 custom AuthenticationSuccessHandler and user redirection
通过这个问题 ,已经阐明了在Symfony2应用程序中登录后如何执行代码。 特别地,解决方案是编写一个AuthenticationHandler
,该实现实现AuthenticationSuccessHandlerInterface
接口。
声明,在接口AuthenticationSuccessHandlerInterface
onAuthenticationSuccess()
函数中,必须指定用户登录后将重定向到的uri。
默认情况下,当用户尝试访问安全区域(即页面X )时,Symfony2会将用户重定向到登录页面。 登录成功后,用户将被重定向到安全页面X。 因此,登录后没有唯一的页面(例如主页)。
如何使用onAuthenticationSuccess()
函数处理将用户重定向到页面X ?
我实现了这个解决方案。 1)将URI保存在每个访问页面的会话中(登录页面除外)。 2)在onAuthenticationSuccess()
函数中加载URI,以在RedirectResponse()
返回它。
要完成第1点),需要执行两个步骤:第一)假定已定义了基本模板,请将以下代码放在您想要的位置(例如,也放在<html>
标记之前):
{% block setcurrenturi %}
{{ setCurrentURI(app.session, app.request.uri) }}
{% endblock %}
此代码要求在您的Twig Extension中定义一个函数(假设您已经实现了Twig Extension )。 功能很简单:
public static function setCurrentURI($session, $URI) {
$session->set('LAST_URI', $URI);
}
然后,转到登录表单页面的Twig模板,并将该块重新定义为:
{% block setcurrenturi %}
{% endblock %}
这样,登录页面的URI不会保存在会话中。
现在,在onAuthenticationSuccess()
函数中放入以下行:
return new RedirectResponse($request->getSession()->get('LAST_URI'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.