使用this question,已经阐明了如何在Symfony2应用程序中登录后执行代码。特别是,解决方案是编写实现接口AuthenticationHandler
的{{1}}。
声明,在接口AuthenticationSuccessHandlerInterface
的函数onAuthenticationSuccess()
中,必须指定用户在登录后将被重定向到的uri。
默认情况下,当用户尝试访问安全区域(即第X页)时,Symfony2会将用户重定向到登录页面。登录成功后,用户将被重定向到受保护的页面X 。因此,登录后没有唯一的页面(例如家庭)。
如何使用AuthenticationSuccessHandlerInterface
功能将用户重定向到第X页?
答案 0 :(得分:1)
我实施了这个解决方案。
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'));