0

我已经用 symfony 4.3 开始了一个项目。注册和验证用户的代码是使用控制台生成的,使用bin/console make:authand bin/console make:registration-form,除此之外我并没有真正修改它。

现在,我有一些页面仅限于某些用户角色。这是在 config/packages/security.yaml 中配置的,例如

security:
    access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }

我还有一个允许我修改用户角色的表单。现在这是问题的症结所在:如果我修改当前连接的用户的角色,他可以访问的页面在他注销并再次登录之前不会改变。由于数据库已正确更新,这意味着他以前的角色仍存储在某个地方。我需要知道在哪里,这样我就可以在不强制他注销并重新登录的情况下更新它。

我不认为它在一个普通文件中,因为find . -mmin 5在我创建一个新用户并以他们身份登录后什么也找不到。我见过提到 var/cache//session,但我没有这个目录。我在数据库中也看不到任何内容,在我的浏览器上也看不到任何带有信息的 cookie。

那么,Symfony 在哪里存储登录用户的信息呢?


https://stackoverflow.com/a/57676864/11410707

这个解决了(部分)我的问题,但前提是我修改了当前用户,而不是修改另一个用户。我仍然对令牌的存储位置感兴趣。


即使两个链接都没有提供答案,问题也已被锁定,所以在这里记录一下:

登录用户的信息存储在每个用户的 PHP 会话中。反过来,PHP 会话作为纯文件存储在目录 /var/opt/remi/php73/lib/php/session/ 中(至少在我的 CentOS 安装中)。

每个会话只能由相应的用户访问,由 cookie PHPSESSID 标识。因此,无法直接刷新远程用户的会话。

4

1 回答 1

0

生成新令牌并刷新

$user->addRole('ROLE_****');

$token = new UsernamePasswordToken($user,null,'main',$user->getRoles());

$this->container->get('security.context')->setToken($token);
$userManager = $this->container->get('fos_user.user_manager');
$userManager->refreshUser($user);
于 2020-01-10T14:41:37.437 回答