@e-hot

Как в Symfony 2 реализовать единую форму регистрации и авторизации?

Приветствую всех.
Исходная ситуация:
1. На сайте для пользователя необходимо соорудить единую форму для реализации и авторизации ( remember-me так же подразумевается ), чтобы пользователь не бегал по двум разным формам: региться в форме регистрации, авторизоваться - в авторизации. Другими словами: нужна форма 2 в 1.
2. Проект пишется на Symfony 2.3
3. Документация и примеры в Symfony 2 показывают как создавать авторизацию отдельно и регистрацию отдельно, про нечто единое и цельное ничего не нашел.
4. Начал копать эту задачу вглубь: пока думается, что нужно реализовывать свой метод в контроллере вместо пресловутого метода, на который указывает рекомендуемый документацией logic_check в security.yml:
...
form_login:
    login_path: /account/login
    check_path: /account/login_check
...

и routing.yml:
...
login_check:
    pattern: /account/login_check
...


Но, судя по докам, Symfony 2 перехватывает событие и вводимые логин:пароль обрабатывает где-то у себя. Где именно это происходит в Symfony - из всей найденной документации так и не нашел.

На данный момент я понимаю так, необходимо ( или-или ):
  1. просто переписать "где-то там в Symfony 2" функционал обработки данных из формы;
  2. отменить действие "где-то там в Symfony 2" функционала обработки данных из формы и вместо него написать свой функционал.
Вопрос: если кто сталкивался с подобными задачами или знает эту часть Symfony 2 до мозга костей, помогите разобраться в понимании проблемы ( при поисках инфы я так или иначе упирался в тему событий ( Events ), нужно переписывать под свои требования какие-то там Эвенты для Фаервола? ). Или другими словами: как и где в Symfony 2 написать custom login_check?

Примечание: единая форма регистрации/авторизации ( method POST )- это одна форма с полями логин (email), пароль ( и чекбокс remember-me ). Метод контроллера через request получает данные из формы. Проверяет, если в БД уже есть логин (email), то ищет пароль, если пароль совпадает, то запускается процесс авторизации.
Если в БД нет логина (email), то запускается процесс регистрации ( добавление в БД новых логин:пароль с кучей служебной инфы, типа: дата-время, активный и т.д. ). Вне зависимости, какой процесс запущен, после регистрации или авторизации пользователь перенаправляется в личный кабинет. Вывод ошибок о неправильном пароле пока не нужен.

Заранее благодарю за помощь, советы, рекомендации и ликбез. Отвечу на все встречные вопросы, если что непонятно из поставленного вопроса.
  • Вопрос задан
  • 936 просмотров
Пригласить эксперта
Ответы на вопрос 2
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Я бы копал в сторону кастомного UserProvider: symfony.com/doc/current/cookbook/security/custom_p...

public function loadUserByUsername($username)
    {
        // make a call to your webservice here
        $userData = ...
        // pretend it returns an array on success, false if there is no user

        if ($userData) {
            $password = '...';

            // ...

            return new WebserviceUser($username, $password, $salt, $roles);
        }

        // Тут создаем пользователя
    }


Т.е. если пользователь ошибка в логине, его автоматически зарегистрирует без спроса? -_-
Ответ написан
Комментировать
WarGot
@WarGot
Посмотри в сторону FOS user bundle, надо будет переопределить контроллеры авторизации и регистраци на свои, дописать пару строк и профит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы