symfonyのマニュアルhereに記載されているようにserialize/userializeメソッドを使用して、ユーザにログインしようとしています。Symfony Loginシリアル化/非シリアル化が機能しない、無効な文字列
ContextListener内にトークンをダンプして文字列のシリアル化を解除しようとすると、無効な文字列のエラーが発生します。
usernameフィールドは実際には電子メールフィールドです。
UserEntity
/**
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="XXX\UserBundle\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity("username")
*/
class User extends AbstractEntity implements UserInterface, AdvancedUserInterface, \Serializable
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(
* targetEntity="XXX\UserBundle\Entity\UserRoles",
* inversedBy="users"
*)
* @ORM\JoinTable(
* name="users_user_role",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
*)
*/
protected $roles;
/**
* @ORM\Column(name="password", type="string", length=64)
*/
protected $password;
/**
* @Assert\NotBlank()
* @Assert\Length(max=4096)
*/
protected $plainPassword;
/**
* @ORM\Column(name="enabled", type="boolean")
*/
protected $enabled = true;
/**
* @ORM\Column(name="locked", type="boolean")
*/
protected $locked = false;
/**
* @ORM\Column(name="expired", type="boolean")
*/
protected $expired = false;
/**
* @ORM\Column(name="expires_at", type="datetime", nullable=true)
*/
protected $expiresAt;
/**
* @ORM\Column(name="last_login", type="datetime", nullable=true)
*/
protected $lastLogin;
/**
* @ORM\Column(name="confirmation_token", type="string")
*/
protected $confirmationToken;
/**
* @ORM\Column(name="password_requested_at", type="datetime", nullable=true)
*/
protected $passwordRequestedAt;
/**
* @ORM\Column(name="credentials_expired", type="boolean")
*/
protected $credentialsExpired = false;
/**
* @ORM\Column(name="user_default_language", type="string")
*/
protected $userDefaultLanguage;
//getters and setters
public function isAccountNonExpired()
{
return $this->getExpired();
}
public function isAccountNonLocked()
{
return $this->getLocked();
}
public function isCredentialsNonExpired()
{
return;
}
public function isEnabled()
{
return $this->getEnabled();
}
/**
* @return string
*/
public function serialize()
{
return serialize([
$this->id,
$this->username,
$this->password,
$this->enabled,
]);
}
/**
* @param string $serialized
*/
public function unserialize($serialized)
{
list (
$this->id,
$this->username,
$this->password,
$this->enabled
) = $this->unserialize($serialized);
}
私はちょうどERR_EMPTY_RESPONSE
いかなるエラーを得ることはありませんログインしようとします。しかし、私はContextListener::handle()
メソッドからトークンを取得し、それをシリアル化しようとすると、文字列が間違っていると言います。
だから、シリアライズに関係しているが、私は私が間違って何をすべきか理解して/分からない...あなたの質問に十分な情報が
ありがとうございます。 –