- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,其中有 super 管理员角色和具有不同权限的各种用户角色。我希望能够使用 _switch_user
查询来模拟这些用户,如 http://symfony.com/doc/current/book/security.html#impersonating-a-user 所示。
但是,当我将查询添加到网址末尾时,它似乎没有执行任何操作。我已经玩了很长时间了,似乎找不到解决方案。我知道我登录的用户有 ROLE_ALLOWED_TO_SWITCH
,但我似乎不太明白 symfony 是如何做到这一点的。
我正在使用自定义身份验证提供程序,因此我认为它与此有关,但我不确定我需要查看什么。我可以发布所需的任何代码,但我真的不知道现在要发布什么。
最佳答案
因此,我进行了更多研究,发现我的自定义身份验证提供程序的 Listener
类编写不正确。它的编写方式是在每次页面加载时创建一个新的Token
。
因此需要完成两件事。
第一个是将身份验证监听器更改为与 Symfony Firewall Listeners 中的类似。 ,其总体结构如下所示。
if (null !== $token = $this->securityContext->getToken()) {
if ($token instanceof UsernamePasswordToken && $token->isAuthenticated() &&
$token->getUsername() === $username) {
return;
}
}
如果满足某些条件,这些监听器基本上允许身份验证继续进行,而无需创建新 token 。这些条件是 token 是正确 token 的实例、经过身份验证并且用户名与登录用户的用户名匹配。
其次,如果他尝试切换用户,则必须修改此代码以根据原始用户检查身份验证。 This issue详细说明了其他人遇到的类似问题。修复方法是循环遍历角色以查找 SwitchUserRole 并使用该数据进行身份验证。我已经复制了下面的补丁,该补丁位于上面的初始 if
语句之后。
foreach ($token->getRoles() as $role) {
if ($role instanceof SwitchUserRole) {
$token = $role->getSource();
break;
}
}
总的来说,身份验证监听器仅在未通过某些条件的情况下才会创建新 token ,并且模拟另一个用户的凭据将用于测试身份验证,而不是他们尝试模拟的用户的凭据。
关于symfony - symfony 如何监听 _switch_user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167550/
我正在尝试使用 Symfony2 security docs 中描述的 switch_user 技术。不幸的是,它不起作用。当我浏览到 http://myurl.com/foo?_switch_use
我有一个应用程序,其中有 super 管理员角色和具有不同权限的各种用户角色。我希望能够使用 _switch_user 查询来模拟这些用户,如 http://symfony.com/doc/curre
我是一名优秀的程序员,十分优秀!