Я заблокировал пользователей, которые могут повторно активировать свою учетную запись, если они вводят действительный ValidationCode
при входе в систему. Поскольку пользователь ранее заблокирован, я использую AuthenticationFailureListener
, чтобы обнаружить неудачу входа в систему и определить, есть ли действительный код проверки, в соответствии с трассировкой журнала. Кажется, что каждое действие имеет правильные данные, и все должно работать нормально, но проблема в том, что данные остаются То же самое, ничего не сохраняется в базе данных, поэтому никаких изменений не происходит.FOSUserBundle разблокировать пользователя при входе в систему: изменения не сохраняются
Это мой код:
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
$userReactivated = false;
// Checks if error is due to user locked and
if ($exception instanceof LockedException)
{
$username = $request->request->get("_username");
$v_code = $request->request->get("_validation_code");
error_log("{$username} {$v_code}");
$user = $this->em->getRepository("AppUserBundle:Usuario")->findOneBy(array('username' => $username));
if ($user != null)
{
$validationCode = $this->em->getRepository("AppUserBundle:ValidationCode")->findOneBy(array('code' => $v_code));
if ($validationCode != null)
{
error_log("Code " . $validationCode->getId());
if ($validationCode->isActive())
{
$user->setValidationCode($validationCode);
$userReactivated = true;
$user->setLocked(false);
$this->em->persist($user);
$this->em->flush();
}
}
}
}
if (!$userReactivated)
return parent::onAuthenticationFailure($request, $exception);
else
{
return true; // TODO: login user and redirect to home page
}
}
Исправьте с дополнительной информацией. Только код и «попробуйте» ответы не приветствуются, поскольку они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». – abarisone