Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect Symfony2自定义身份验证SuccessHandler和用户重定向_Redirect_Login_Symfony - Fatal编程技术网

Redirect Symfony2自定义身份验证SuccessHandler和用户重定向

Redirect Symfony2自定义身份验证SuccessHandler和用户重定向,redirect,login,symfony,Redirect,Login,Symfony,在中,已阐明了如何在登录Symfony2应用程序后执行代码。特别是,解决方案是编写一个AuthenticationHandler,它实现接口authenticationsuccesshandler接口 声明,在来自interfaceAuthenticationSuccessHandlerInterface的函数onAuthenticationSuccess()中,必须指定用户登录后将重定向到的uri 默认情况下,当用户尝试访问安全区域(即第X页)时,Symfony2会将用户重定向到登录页。登录成

在中,已阐明了如何在登录Symfony2应用程序后执行代码。特别是,解决方案是编写一个
AuthenticationHandler
,它实现接口
authenticationsuccesshandler接口

声明,在来自interface
AuthenticationSuccessHandlerInterface
的函数
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已执行,用户必须再次按下。