2013-03-26 4 views
3

Я работал над пользовательской системой аутентификации с Symfony 2.1. После много битв с Symfony у меня есть что-то, что работает, но не полностью ...Пользовательская аутентификация Symfony2: пользователь зарегистрировался, но не прошел проверку подлинности

Задача: После входа в систему (через форму) пользователь регистрируется, но не аутентифицируется.

Контекст: Поскольку пользователи должны отправлять свои учетные данные через форму HTML, мне пришлось создать слушатель, который расширяет AbstractAuthenticationListener.

Вопрос: Не должен ли слушатель автоматически добавить токен в SecurityContext? Если это не так, следует ли мне это сделать вручную?

Процесс:

Пользователь отправляет свои учетные данные через HTML форму запроса

Слушатель перехватывает и работает attemptAuthentication

Слушатель называет AuthenticationManager (в реализует AuthenticationProviderInterface) Аутентифицировать метод

AuthenticationManager называет UserProvider (реализует UserProviderInterface) для получения данных пользователя от моего веб-сервиса.

UserProvider возвращает пользователя класса, реализующего пользовательского интерфейс

AuthenticationManager создает Токен реализующий TokenInterface.

AuthenticationManager возвращает токен слушателю.

attemptAuthentication возвращает слушателю фишку из метода AuthenticationManager в: аутентифицировать

Пользователь регистрируется, но не прошел проверку подлинности.

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

+1

Когда все работает правильно, все слушатели.tryAuthentication должна сделать, это вернуть аутентифицированный токен, который, в свою очередь, происходит от аутентификацииManager.authenticate. Не нужно явно устанавливать его в security.context. Первый шаг - проверить, действительно ли токен аутентифицирован, так как в игру играют различные другие слушатели. Является ли аутентифицированный токен UsernamePasswordToken? – Cerad

+0

Аутентифицированный токен - это экземпляр моего «CustomToken», как определено в методе authenticationManager.support. – SupaCoco

+1

описание вашего процесса поможет мне много разобраться в рабочем процессе всего. Im, реализующий собственный поставщик аутентификации на основе BorisMorel LdapBundle, и ваш вопрос отвечал на все мои вопросы! Благодаря!! :) –

ответ

2

Я нашел ошибку ...

После входа в систему, то AuthenticationSuccessHandler перенаправляет пользователя на URL я хочу. Это действие запускает refreshUser из UserProvider.

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

Смежные вопросы

 Смежные вопросы