Кастомная авторизация Symfony
Делаю кастомную авторизацию на сайте, перед авторизацией проверяем есть ли юзер в БД, если его нет, то сначала регистрируемся, с этим проблем нет, и потом непосредственно авторизация, из-за слишком многих слоёв абстракции непонятен внутренний механизм авторизации, понятно что создаётся User obj с ролью, который сохраняется между запросами по аналогии $_SESSION в чистом ПХП. Подскажите как лучше реализовать такую логику, по сути мне нужно вызвать экшен авторизации после регистрации или отказа в регистрации если юзер уже есть. Форма на сайте одна(она же регистратор и авторизатор). Сейчас у меня контроллер AuthOrRegister
"@Route("/login"
В нем создаётся объект /Entity/User заполняются нужные поля, пришедшие в Request(из инпутов), хэшируем пароль:
$passwordHasher->hashPassword(
$user,
$params['password']
);
дальше try catch flush() этого объекта через $doctrine->getManager(). И дальше уже нужно запустить механим авторизации, на основании этих данных из инпут полей. На чистом пхп такая логика реализуется за 15 минут. Фактически мне нужно в моем контроллере реализовать AuthentificatorInterfaces или переопределить методы какого то другого класса, вот какого и как мне непонятно, для того чтобы сохранить работу фаервола и не сломать механизм авторизации симфони. Форма у меня простая без php классов в /Form, просто инпуты в _auth.html.twig
Ответы (1 шт):
После попытки регистрации или не успешной регистрации(пользователь уже зарегистрирован ранее) - делаем редирект на /login.
return $this->redirectToRoute('login', [
'request' => $request
], 307);
Таким образом нужно два логика выглядит так:
/index - после ввода полей идёт POST на /register
/register - попытка регистрации, если не удалась, то пробуем авторизоваться /login
/login - попытка авторизации, если не удалась то редирект через security.yaml
firewalls: main: form_login: failure_path: login_failure
ps
После чистого PHP трудно привыкнуть что есть какие то службы, которые могут тупо перехватывать неявно запросы и выполнять логику по авторизации - security