Пользовательский ответ Symfony 2.4 для удаленного сеанса
Я разрабатываю RESTful-интерфейс в своем приложении (используя FOSRestBundle) и хочу, чтобы он всегда возвращал какой-то значимый ответ JSON, даже если неинтерактивная аутентификация не удалась (например, пользователь был заблокирован во время сеанса входа в систему). Теперь он просто перенаправляет на страницу входа.
Хотя я мог бы реализовать это с помощью Core Exception Listener некоторых видов, но я не знаю, какие исключения прослушивать или вообще возможно.
Некоторые советы будут высоко оценены.
1 ответ
Вы должны удалить ограничение "is loggedin" из маршрута.
Например, если у вас есть что-то подобное в вашем security.yml
- { path: ^/admin, role: ROLE_ADMIN }
вы должны заменить его - { path: ^/admin, role: IS_AUTHENTICATED_ANONYMOUSLY }
и проверьте, зарегистрирован ли он в вашем контроллере. Для проверки роли пользователя в контроллере используйте
$securityContext = $this->container->get('security.context');
if( $securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY') ){
return;//send error json
}
//is logged in and authorized
Когда он на самом деле вошел в систему, просто продолжайте как обычно, иначе отправьте свой пользовательский ответ.
Я настоятельно не советую вам делать это, так как у вас есть больше кода для поддержки и больше ошибок, особенно если вы хотите защитить данные.