Symfony2自定义AuthenticationSuccessHandler和用户重定向

时间:2012-08-10 14:33:34

标签: redirect login symfony

使用this question,已经阐明了如何在Symfony2应用程序中登录后执行代码。特别是,解决方案是编写实现接口AuthenticationHandler的{​​{1}}。

声明,在接口AuthenticationSuccessHandlerInterface的函数onAuthenticationSuccess()中,必须指定用户在登录后将被重定向到的uri。

默认情况下,当用户尝试访问安全区域(即第X页)时,Symfony2会将用户重定向到登录页面。登录成功后,用户将被重定向到受保护的页面X 。因此,登录后没有唯一的页面(例如家庭)。

如何使用AuthenticationSuccessHandlerInterface功能将用户重定向到第X页

1 个答案:

答案 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'));