0

アプリに認証済みセクションがありますが、認証はサードパーティ サービスに対して oauth を介して行われます。サービスから 200 コールバックを受け取り、ユーザーを作成/検索して、ログイン済みとして設定します。

したがって、私のプロバイダーは次のとおりです。

providers:
    users:
        entity: { class: MainBundle:User, property: id }

ユーザー エンティティにユーザー名、パスワードなどのプロパティがありませんが、ユーザーはセキュリティの UserInterface を実装しています。その場合、使用できる識別子は id だけだと思います。

私のトークンは次のように設定されています:

$token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles());
$this->securityContext->setToken($token);

今のところ JMS バンドルを使用せずにこれを行いたいと考えています。私のシリアライゼーションは次のようになります。

/**
 * Serialize
 * @return string|void
 */
public function serialize()
{
    return serialize(array(
        'id' => $this->getId(),
        'display_name' => $this->getDisplayName(),
        'email' => $this->getEmail(),
    ));
}

/**
 * Unserialize
 * @return mixed|void
 */
public function unserialize($data)
{
    $data = unserialize($data);
    $this->setId($data['id']);
    $this->setDisplayName($data['display_name']);
    $this->setEmail($data['email']);
    return $this;
}

上記を使用すると、無限ループのリダイレクトが発生します。

最初は ID のみをシリアル化しましたが、ユーザーの他のすべてのプロパティは利用できません。

次に、オブジェクト全体 ($this) をシリアル化しようとしましたが、1000 の xdebug ネスト レベル エラーが発生しました。

この認証をシリアル化で機能させる方法が少しわかりません

4

1 に答える 1

0

security.yml

providers:
    users:
        entity: { class: MainBundle:User, property: id }

ログインロジック

$token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles());
$this->securityContext->setToken($token);

ユーザー エンティティからシリアライゼーションを取り出しましたが、同等のインターフェイスも実装していません。また、これは必要ですが、まだインターフェイス プロパティを持っていません。

public function getUsername()
{
    return $this->getId();
}
于 2013-01-28T14:03:02.743 に答える