Сделайте пользователя программно онлайн и отметьте срок действия учетных данных одновременно

TL; DR вопрос: Как сделать пользователя онлайн сразу после регистрации и отметить, что его учетные данные истекли, чтобы он мог предоставить пароль при следующем входе в систему?

Я создаю систему регистрации с наименьшими хлопотами на моем сайте Symfony2 (2.7):

  • Пользователь вводит адрес электронной почты и заполняет капчу
  • Пользователь зарегистрирован в системе
  • Временный пароль отправляется на адрес электронной почты пользователя сразу
  • Я не требую, чтобы пользователь вводил какой-либо код подтверждения или что-либо еще — я не хочу заставлять пользователей входить в свою электронную почту, скажем, на общедоступной машине. Таким образом, первый вход в систему после регистрации «без пароля, без подтверждения
  • Пока этот пользователь никоим образом не подтвержден, я разрешу только некоторые функции веб-сайта, т.е. его пост не будет виден, пока он не будет в конечном итоге проверен. Это не мешает пользователю использовать сайт
  • Когда пользователь хочет получить подтверждение, он должен установить свой пароль. Он может установить пароль только путем ввода оригинального пароля, который был отправлен на его адрес электронной почты.

Это ключевой момент всей идеи: если пользователь может предоставить оригинальный пароль, который он ранее не знал и который был отправлен на его электронную почту, мы можем быть уверены, что у него есть доступ к указанному адресу электронной почты.

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

Дело в том, что если я установлю учетные данные как истекшие до входа в систему, это, конечно, не удастся. Поэтому я хотел установить учетные данные как истекшие сразу после того, как я установил UsernamePasswordToken в security.token_storage, но он тоже не удался. Есть идеи, что я делаю не так?

В результате я установил срок действия учетных данных, срок действия которых истек, на странице «Спасибо», которая работает, но на самом деле не является хорошим решением.

AccountController со всеми необходимыми действиями: http://pastebin.com/GZspAzMr

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

[2015-09-11 09:28:14] security.INFO: An AuthenticationException was thrown; redirecting to authentication entry point. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\ProviderNotFoundException(code: 0): No Authentication Provider found for token of class \"Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken\". at /var/www/project/app/cache/dev/classes.php:2679)"} []

Мои настройки безопасности разрешают неограниченный доступ к контроллеру учетной записи: http://pastebin.com/7GAV4TGc

1

Решение

Задача ещё не решена.

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

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