У меня была та же проблема, и мне потребовалось много копаний, чтобы понять это.
Проблема в том, что вы не сериализуете имя пользователя в функции сериализации объекта User.
Многие люди используют следующее для своих функций сериализации:
public function serialize()
{
return serialize($this->id);
}
public function unserialize($data)
{
$this->id= unserialize($data);
}
Таким образом, при загрузке пользователя из токена сеанса известен только идентификатор (обратите внимание, что это также нарушает функциональность? _Switch_user = _exit).
Чтобы исправить это, вы должны использовать следующий код:
public function serialize()
{
return serialize(array($this->id,$this->username));
}
public function unserialize($data)
{
list($this->id,$this->username) = unserialize($data);
}
Таким образом, доступны имя пользователя и идентификатор, а проблема устранена.
ПРИМЕЧАНИЕ.'функция вашего пользовательского поставщика НИКОГДА не будет использоваться, поскольку она будет отменена EntityUserProvider!