В журнале отладки Symfony2 не отображается имя пользователя - PullRequest
2 голосов
/ 14 февраля 2012

У меня проблема с журналами отладки - если произошла ошибка, журнал ошибок не показывает, какой пользователь вызвал ошибку, но устанавливает пустое имя пользователя - security.DEBUG: Username "" was reloaded from user provider. [] []

Я использую пользовательский поставщик сущностей, написанный в соответствии с пособие по кулинарной книге .Другие сообщения - например, security.INFO: User "......" has been authenticated successfully отображается правильно.

Примечание: я также публикую эту проблему на форуме .

1 Ответ

4 голосов
/ 10 августа 2012

У меня была та же проблема, и мне потребовалось много копаний, чтобы понять это.

Проблема в том, что вы не сериализуете имя пользователя в функции сериализации объекта 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!

...