@Tokenchik

Как залогинить юзера без логина и пароля?

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

Сейчас добавил листенер и перед заходом в контроллер пытаюсь сделать так:
$user = $this->userService->createDemoUser();

$token = new UsernamePasswordToken($user, 'main');

$this->storage->setToken($token);

$event = new InteractiveLoginEvent(Request::createFromGlobals(), $token);

$this->eventDispatcher->dispatch($event, 'security.interactive_login');

$session = $this->requestStack->getSession();

$session->set('_security_main', serialize($token));


После отрисовки странички видно что пользователь аутентифицирован (дебаг панель пишет Authenticated = true), но при обновлении страницы юзер теряется либо не распознается и считается что больше его нет.

Подскажите как сохранить сессию при обновлении страницы либо как аутентифицировать таких юзеров без кредов.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Cannot refresh token because user has changed.


Эта ошибка возникает, если метод https://github.com/symfony/symfony/blob/6.2/src/Sy... возвращает false
Много вариантов: поменялся пароль, роль и тд.

В вашем случае, менялась роль (точнее роль вы не передавали и при получении пользователя роль бралась из метода $user->getRoles())

В вашем случае правильным будет что-то вроде:
$token = new UsernamePasswordToken($user, 'main', $user->getRoles());
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы