Авторизация на сайте

1. Создание сущности пользователя

            
        php bin/console make:user
            
        

Теперь добавим миграцию

            
        php bin/console make:migration
            
        

Запустим ее, чтобы создались необходимые поля в базе данных

            
        php bin/console doctrine:migrations:migrate
            
        

Создадим фикстуру

            
        php bin/console make:fixtures
            
        

Пример содержимого класса фикстуры.

            
            namespace App\DataFixtures;
            use App\Entity\User;
            use Doctrine\Bundle\FixturesBundle\Fixture;
            use Doctrine\Persistence\ObjectManager;
            use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

            class UserFixtures extends Fixture
            {
                private $passwordEncoder;

                public function __construct(UserPasswordEncoderInterface $passwordEncoder)
                {
                    $this->passwordEncoder = $passwordEncoder;
                }

                public function load(ObjectManager $manager)
                {
                    $user = new User();
                    $user->setEmail("admin@mail.ru");
                    $user->setRoles(['ROLE_ADMIN']);
                    $user->setPassword($this->passwordEncoder->encodePassword($user, '123123123'));
                    $manager->persist($user);
                    $manager->flush();
                }
            }
            
        

2. Генерация формы авторизации

Для создания формы авторизации нам необходимо выполнить следующую команду:

            
        php bin/console make:auth
            
        

В результате выполнения данной команды будут созданы следующие файлы:

  • src/Controller/SecurityController.php - контроллер с маршрутами до формы авторизации и для разлогирования
  • src/Security/AppCustomAuthAuthenticator.php - специальный класс аутентификатор, реализующий интерфейс AuthenticatorInterface, который содержит методы авторизации и проверки привелегий пользователей
  • templates/security/login.html.twig - шаблон формы авторизации


3. Кастомизация формы авторизации

При необходимости изменения внешнего вид формы, достаточно внести правки в файл: templates/security/login.html.twig

Таже можно изменить стандартный путь для формы (/login).
Для этого нужно в файле: src/Security/MyUserAuthenticator.php нужно изменить константу LOGIN_ROUTE, прописав в ней необходимое имя роута

                
        public const LOGIN_ROUTE = 'app_login_my_user';
                
            

Прописать в src/Controller/SecurityController.php путь до формы

                
        /**
         * @Route("/backend-login", name="app_login_my_user")
         */
        public function login(AuthenticationUtils $authenticationUtils): Response
        {
                
            

Теперь форма авторизации доступна по адресу /backend-login

В классе аутентификатора (src/Security/AppCustomAuthAuthenticator.php) можно настроить на какую начальную страницу будет попадать пользователь после успешной авторизации

            
        // src/Security/AppCustomAuthAuthenticator.php

        public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
        {
            $targetPath = $this->getTargetPath($request->getSession(), $providerKey);
            if ($targetPath) {
                return new RedirectResponse($targetPath);
            }

             return new RedirectResponse($this->urlGenerator->generate('backend_news')); // Этот редирект отвечает за переход на дефолтную страницу
        }
            
        

Надеюсь приведенная информация была полезной.