2017-02-06 4 views
0

Мы реализуем AdvancedUserInterface для управления аутентификацией, но по какой-то причине безопасность Symfony будет сериализовать весь User объект, а не только в минимально необходимых полей (например, id, username, password).Symfony является пользовательским интерфейс сериализация всего массивного объекта пользователя

Согласно documentation, мы должны указать точные поля, которые должны быть сериализованы (а затем остальные поля будут проигнорированы).

class User implements AdvancedUserInterface, \Serializable { 

    /** 
    * @see \Serializable::serialize() 
    */ 
    public function serialize() 
    { 
     return serialize(array(
      $this->id, 
      $this->username, 
      $this->password 
     )); 
    } 
} 

Но хотя мы делаем это, безопасность Symfony игнорирует этот serialize() метод и до сих пор сериализации ВЕСЬ объект. Это нарушает знак, потому что объект становится слишком большим для сериализации и хранения.

ответ

0

Очевидно, что безопасность Symfony использует Symfony\Component\Security\Core\Authentication\Token\AbstractToken, и у этого есть собственный метод сериализации, который добавляет больше данных в сеанс, сериализованный пользователем.

public function serialize() 
{ 
    return serialize(
     array(
      is_object($this->user) ? clone $this->user : $this->user, 
      $this->authenticated, 
      $this->roles, 
      $this->attributes, 
     ) 
    ); 
} 

Это добавляет role к сериализованном объекта. Но у нас есть система пользовательской роли, которая имеет ассоциации с другими объектами (например, Site), которые вызывают фатальное вздутие живота User, когда оно сериализуется.

+0

Chadwick, вам удалось это исправить? Я сталкиваюсь с той же проблемой, и пользовательский объект сериализуется в сеанс со всеми видами других объектов связи. – undefinedman

+0

@undefinedman мы нашли решение (потому что все работает), но я не помню, что это было ... Я думаю, что мы как-то удалили отношения (реструктурировали наши сущности), чтобы они не ассоциировались. Извините, я не могу быть более конкретным. –

 Смежные вопросы

  • Нет связанных вопросов^_^