Существует проблема с чем-то, называемым EquatableInterface, которая вызывает такого рода проблемы.Если честно, я не совсем понимаю, почему он делает то, что делает.Но это что-то в процессе аутентификации, которое проверяет, изменился ли пользователь между запросами.
Обновление : Предполагается, что администратор сбрасывает пароль пользователя, когда пользователь вошел в систему. Если выне проверяйте измененный пароль, тогда пользователь может продолжить работу со старым паролем.Вам решать, какое поведение вы хотите.Сериализация пароля и использование реализации EquatableInterface по умолчанию заставит пользователя снова войти в систему.
Один из способов избежать этой проблемы - сериализация пароля.
// App/Entity/User.php
public function serialize()
{
//die('serialize');
return serialize(array(
$this->id,
$this->username,
$this->password
));
}
public function unserialize( $serialized )
{
list (
$this->id,
$this->username,
$this->password
) = unserialize($serialized, ['allowed_classes' => false]);
}
Исправьте свой пользователь ::getRoles и он должен работать.
Другой подход заключается в реализации EquatableInterface
class User implements UserInterface, \Serializable, EquatableInterface
public function isEqualTo(UserInterface $user)
{
//if ($this->password !== $user->getPassword()) {
// return false;
//}
//if ($this->salt !== $user->getSalt()) {
// return false;
//}
if ($this->username !== $user->getUsername()) {
return false;
}
return true;
}
. При таком подходе нет необходимости сериализовать пароль.В любом случае, кажется, работает нормально.