Авторизация на сайте
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
В результате выполнения данной команды будут созданы следующие файлы:
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')); // Этот редирект отвечает за переход на дефолтную страницу
}
Надеюсь приведенная информация была полезной.