У меня есть система, использующая Symfony 3.4 и FOSUserBundle 2.1.2. У нас есть концепция заблокированного пользователя (изначально в FOSUserBundle, но с тех пор он был удален в нашем собственном пакете). Symfony core Security проверяет, заблокирован ли пользователь во время авторизации и выдает LockedException
. Это исключение приводит к сбою входа в систему и отображению простого текстового сообщения на странице входа в FOSUserBundle.
Пользователи могут быть заблокированы и разблокированы по желанию, но в системе также указана c причина для пользователь должен быть заблокирован как часть процесса регистрации, и если пользователь находится в этом состоянии, я хотел бы показать пользователю другую страницу при входе в систему, говоря: «Ваша учетная запись заблокирована, потому что XYZ, пожалуйста, подождите, пока мы уведомим вас о том, что все настроено правильно ". Тем не менее, я не понимаю, как это сделать в рамках FOSUserBundle.
Обычно для такого рода событий используются события, но в этот конкретный момент не возникает событие, которое помогает - они недостаточно конкретизированы c и не допускают условного перенаправления.
Я начал пытаться переопределить FOSUserBundle SecurityController
, чтобы ввести некоторые собственные логики c, которые, я думаю, будут работать , но наследование пакетов не будет поддерживаться при переходе на Symfony 4.x (в ближайшее время).
Переход на более современный Symfony Защитный подход к безопасности даст нам необходимую гибкость, и мы будет делать это в какой-то момент (сам FOSUserBundle не поддерживает самые последние версии Symfony в любом случае), но предпочитает не делать этого прямо сейчас.
Есть ли подход, который позволит нам условно перенаправить заблокированных пользователей продолжая работать в процессе FOSUserBundle?
Заранее спасибо!