2015-06-29 11 views
2

Symfony предоставляет простой способ запретить пользователям входить в систему с использованием свойства isEnabled, если класс пользователя реализует AdvancedUserInterface.Как выйти из запрещенного пользователя в Symfony?

Однако, если пользователь не вошел в систему, он не позволит им получить доступ к веб-сайту до истечения срока их действия.

Идея состояла в том, чтобы проверить свойство isEnabled после получения объекта пользователя ($this->get('security.token_storage')->getToken()->getUser()) и затем аннулировать сеанс. Каков предпочтительный способ сделать это?

Или есть лучший способ достичь этой цели?

ответ

2

Вы можете установить следующие параметры в вашем security.yml:

security: 
    always_authenticate_before_granting: true 

Это будет всегда повторно проверить подлинность пользователя перед сохранением информации в токен , Он позаботится об этих изменениях в пользовательской конфигурации, но также о таких вещах, как измененные роли и т. Д.

2

Может поймать запрос перед выполнением контроллера (есть слушатель для этого я думаю), проверьте его счет блокируется, и если это так просто сделать 403 ответа и Hasta La Vista ребенка

0

Лучший способ перенаправляет их URL-адрес logout, который обрабатывается системой безопасности. Вы можете сделать это, создав слушателя, который прослушивает событие kernel.request. Here is a gist который я создал около месяца назад, что обеспечивает такую ​​функциональность ..

0

Вы можете сделать это с помощью пользовательского поставщика (это простое изменение, если вы уже используете его).

http://symfony.com/doc/current/cookbook/security/custom_provider.html

loadUserByUsername вызывается, когда пользователь входит в систему.

refreshUser вызывается на каждом последующем запросе. Пользовательский объект неэтериализуется, а затем обновляется. Затем вы можете делать все, что хотите, в методе обновления, в том числе перезагрузить его из базы данных и проверить, запрещен ли пользователь.

Смежные вопросы