Я начал проект с symfony 4.3. Код для регистрации и аутентификации пользователей был сгенерирован с помощью консоли, с bin/console make:auth
и 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. Таким образом, невозможно напрямую обновить сеанс удаленного пользователя.
refreshUser
дляUserProvider
, чтобы обновить роли, когда пользователь приходит и сеанс перезагружается. - person GrenierJ   schedule 10.01.2020