Symfony 2 中用户切换(模拟)后的重定向

Posted

技术标签:

【中文标题】Symfony 2 中用户切换(模拟)后的重定向【英文标题】:Redirect after user switching (impersonating) in Symfony 2 【发布时间】:2012-02-02 19:52:23 【问题描述】:

我到处搜索,但似乎不可能做到。

我能够捕获来自SwitchEventListenerSwitchEvent 并同时获取模仿者和目标用户对象(一个被模仿为),但我真的很想根据目标用户角色将请求重定向到其他 URL。

例子:

我有两个受限区域:“/basic”和“/elevated”,其中第一个需要ROLE_BASIC,另一个需要ROLE_ELEVATED 角色。现在,如果我当前以 ROLE_ELEVATED 用户身份登录并想使用 URL 切换到某个 ROLE_BASIC 用户:

/basic/?_switch_user=some_basic_user

这会导致 AccessDeniedException,我不得不先导航到:

/?_switch_user=some_basic_user. 

只有在这之后,我才能导航到 /basic,因为令牌已写入会话。

现在,问题,正如主题所暗示的那样:在进行用户切换后,有没有办法使用SwitchEvent(或任何其他)重定向用户?

【问题讨论】:

你解决过这个问题吗?我有同样的问题。似乎AccessListenerSwitchUserListener 之前被调用,所以你在SwitchUser 被调用之前就被锁定了? 实际上,我做到了:) 目前,我无法访问我的开发计算机,但正如我所做的那样(明天或之后的一天),我将在这里写下我是如何做到的。顺便说一句,感谢您提醒我发布的问题。我完全忘记了我问过它,所以我肯定需要用适当的答案“关闭”它...... 我对你的解决方案也很感兴趣 【参考方案1】:

好的,我终于可以访问我的开发计算机并查找此问题的解决方案。

而且,我不得不说,它没有我想要的那么干净,但交货日期很关键,这是当时实现它的唯一方法。

所以,我基本上所做的就是向 URL /?_switch_user=some_basic_user 发送 AJAX(尽管我将 async 设置为 false)请求,等待答案,如果成功,我将导航到 /basic/?_switch_user=some_basic_user网址。我知道,它又快又脏,而且非常不可靠......

希望这会有所帮助....

【讨论】:

不错的解决方案,有点老套,但对我有用。我希望有一个内置的重定向路径【参考方案2】:

您只需生成正确的链接即可:

<a href="/basic/?_switch_user=some_basic_user">...</a>

当然,twig 的 path 助手也可以生成 URL:

<a href=" path('basic_homepage',  _switch_user: 'some_basic_user' ) ">...</a>

【讨论】:

引用问题:这将导致 AccessDeniedException

以上是关于Symfony 2 中用户切换(模拟)后的重定向的主要内容,如果未能解决你的问题,请参考以下文章

防止用户直接访问 django 中的重定向 URL

symfony:在多个防火墙中模拟用户

成功认证后的 Spring-SAML 无休止的重定向循环

他的第一次连接的重定向用户

shell脚本中的重定向符号

Python网页分析httplib库的重定向处理