Как создать свой провайдер Запомнить меня в Symfony

Я объясню мою проблему. Я регистрирую пользователей, используя API, передавая имя пользователя и зашифрованный пароль, поэтому я не могу загружать пользователей только по имени пользователя.

Я использую GUARD для получения информации о пользователе и авторизации пользователей для данного брандмауэра. Все идет нормально.

Моя проблема начинается, когда я хочу активировать запомнить меня. Очевидно, что пользователь не хранится в моей базе данных, но не могу загрузить пользователя по имени.

На данный момент я преодолел проблему, реализуя класс RememberMeServicesInterface и используя мой новый класс в своем классе защиты, который расширяет AbstractFormLoginAuthenticator.

Честно говоря, это похоже на взлом, так как я почти уверен, что должен быть лучший способ сделать это.

Проверяя код, я заметил, что у Symfony есть 2 класса, которые реализуют RememberMeServiceInterface, TokenBasedRememberMeServices и PersistentTokenBasedRememberMeServices, может кто-нибудь объяснить мне, как я могу также внедрить свой RememberMeService и использовать это для авторизации моего пользователя?

Заранее спасибо сообществу за помощь.

3

Решение

Я наконец-то нашел способ добиться привычного запоминания меня.
Вот эти шаги:

1) Создайте класс, который расширяет Symfony \ Bundle \ SecurityBundle \ DependencyInjection \ Security \ Factory \ RememberMeFactory

Этот класс переопределяет getKey () с помощью пользовательского ключа и create (), поэтому я могу добавить свой собственный сервис токенов security.authentication.rememberme.services.MYCUSTOMTOKENSERVICE

2) Создайте службу токенов, которая расширяет Symfony \ Component \ Security \ Http \ RememberMe \ TokenBasedRememberMeServices, чтобы я мог использовать свою логику аутентификации и свою пользовательскую функцию UserProvider

3) Создайте прослушиватель, который расширяет Symfony \ Component \ Security \ Http \ RememberMe \ ResponseListener

4) Связать вместе в моем сервисном файле YML

customlistener.security.authentication.listener:
учебный класс: #####
public: false

security.authentication.rememberme.services.customtokenservice:
учебный класс: ###
родитель: «security.authentication.rememberme.services.abstract» аннотация: true

5) В security.yml я использую строку, которую использовал в getKey, чтобы вызвать моего слушателя custom-запомнить-меня с теми же параметрами ключа запомнить-меня

Работал как шарм!

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]