繁体   English   中英

Symfony2自定义AuthenticationSuccessHandler和用户重定向

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM