Чат Telegram
Группа ВКонтакте
Создание формы логина на Symfony

Создание формы логина на Symfony

Итак, мы уже сделали с вами регистрацию, научились отправлять письма на почту. Осталось реализовать формы входа и выхода, чтобы наше приложение было достаточно защищенным.

Пожалуй, это будет самая короткая статья из этой серии, ведь Symfony предлагает крайне простой механизм создания Login и Logout действий.

Для начала создайте контроллер SecurityController. Он будет достаточно простым и содержать два действия login и logout, поэтому нет необходимости наследоваться от Controller. Все нужно мы заинжектим через конструктор, а нужен нам только twig для рендера формы. Вот как будет выглядеть наш контроллер в самом начале:

Код доступен только после покупки курса по фреймворку Symfony 4.

Теперь реализуем первый action - login.

Код доступен только после покупки курса по фреймворку Symfony 4.

На самом деле, это все. Вам не нужно писать действия по проверке схожести паролей, логина, доставать пользователя из базы или стартовать сессию. Если вы помните, в уроке по созданию сущности (первая статья из серии по реализации аутентификации) мы уже подготовили конфигурацию для логина в файлу config/packages/security.yaml. Она выглядела следующим образом:

Код доступен только после покупки курса по фреймворку Symfony 4.

Так мы создали простой провайдер, который знает, как достать пользователя по определенному полю (в нашем случае этим полем является email).

Компонент AuthenticationUtils отдает нам пользователя либо из сессии, если он уже вошел, или из базы. Также отдает ошибку при входе. Оба этих поля мы передаем в следующий шаблон:

Код доступен только после покупки курса по фреймворку Symfony 4.

Нам даже не нужно указывать атрибут "action" в теге form, достаточно указать поля name="_username" и name="_password".

Не забудем про CSRF-защиту от автоподбора, которая генерирует уникальный хэш при каждой авторизации:

Код доступен только после покупки курса по фреймворку Symfony 4.

Также выведем ошибки в блоке сверху:

Код доступен только после покупки курса по фреймворку Symfony 4.

Теперь напишем action - logout. Выглядеть он будет следующим образом:

Код доступен только после покупки курса по фреймворку Symfony 4.

Вы поверите, если я скажу, что на этом все? Но это правда так. Вернее, не совсем. Symfony уже знает, как разлогинить пользователя, достаточно правильно настроить config/packages/security.yaml.

Код доступен только после покупки курса по фреймворку Symfony 4.

Это стандартная настройка, которая, на мой взгляд, достаточно красноречива: login_path - это страница входа, куда перенаправляется пользователь, когда хочет получить доступ к страницам с определенными правами доступа; default_target_path - это роут, куда перенаправляется пользователь после входа; path: logout - это имя экшена, который разлогинивает пользователя; check_path - это роут, который ловит login-запросы.

На этом все. Вот так просто реализуется авторизация в Symfony.

Комментарии (3)
loader
loader
Логические задачи с собеседований