Новое в Symfony 6.3 — Улучшения login и logout
Пользовательское перенаправление с программным входом в систему
В Symfony 6.2 мы представили метод login()
для облегчения программного входа пользователей. Однако этот метод возвращал значение void
, поэтому вы не могли настроить ответ после логина пользователя в систему.
Базовый UserAuthenticator::authenticateUser()
, вызываемый login()
, возвращает объект Response
, который можно использовать для перенаправления пользователя. Вот почему в Symfony 6.3 метод login()
теперь также возвращает объект Response
:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\Response;
class RegistrationController extends AbstractController
{
public function verifyUserEmail(Security $security): Response
{
// ...
$redirectResponse = $security->login($user);
return $redirectResponse;
}
}
Опция Запомнить меня
для JSON логинов
JSON логин — один из встроенных механизмов аутентификации, предоставляемых Symfony. Он популярен, например, при создании API для генерации токенов безопасности на основе заданного имени пользователя (или электронной почты) и пароля.
Запомнить меня
— встроенная функция безопасности Symfony позволяющая хранить некоторые учётные данные пользователя в подписанном файле cookie, чтобы им не приходилось вводить их снова при следующем просмотре вашего приложения.
В Symfony 6.3 мы объединяем обе функции для обеспечения поддержки Запомнить меня
для JSON логинов. Для этого добавьте ключ _remember_me
(имя ключа настраивается) в тело вашего POST-запроса:
{
"username": "dunglas@example.com",
"password": "MyPassword",
"_remember_me": true
}
Очистка данных сайта после logout
HTTP-заголовок Clear-Site-Data очищает данные браузера (файлы cookie, хранилище, кэш), связанные с запрашивающим веб-сайтом. Это позволяет веб-разработчикам лучше контролировать данные, хранящиеся в клиентском браузере.
В Symfony 6.3 мы добавляем поддержку этого HTTP-заголовка через конфигурацию logout
ваших файрволлов:
security:
# ...
firewalls:
main:
# ...
logout:
path: app_logout
# доступные опции: 'cache', 'cookies', 'storage', 'executionContexts'
# также вы можете использовать '*' для очистки всех данных
clear_site_data:
- cache
- storage
- executionContexts