0

今日、SF2アプリケーションで問題が発生しています。有効なサブスクリプションフォームを送信した後、ユーザーが自動的に認証されるようにしたい。

つまり、基本的に私のコントローラーでは、次のようにします。

if ($form->isValid()) {
    $customer = $form->getData();

    try {
        $customer = $this->get('my.service.manager.customer')->customerSubscribe($customer);
    } catch (APIClientException $e) {
        $error = $e->getErrors();
        ...
    }

    if ($customer && !isset($error)) {
        // connect customer
        $token = new UsernamePasswordToken($customer, null, 'api_auth', array('ROLE_USER'));
        $this->get('security.context')->setToken($token);

        ...
    }

    return new RedirectResponse($this->generateUrl('MyBundle_index'));
}

「connectcustomer」コメントの下の2行は、実際にはユーザーを正常に認証しているように見えます。問題は、RedirectResponseを使用して別のページにリダイレクトすると、認証が失われることです。

に電話をかけてみました

$this->container->get('security.context')->isGranted('ROLE_USER')

これは、RedirectResponseの呼び出しの直前にtrueを返し、応答がリダイレクトされている他のコントローラーではfalseを返します。

この時点で、私は自分が間違っていることについて少し混乱しています。どんなアイデアでもありがたいです。ところで、私はSymfony2.1を使用しています

4

2 に答える 2

1

わかりました私はそれを次のように解決しました:

$token = new UsernamePasswordToken($customer->getEmail(), null, 'api_auth', array('ROLE_USER'));

どうやら、顧客オブジェクト全体ではなく、UsernamePasswordToken の最初の引数として顧客 ID (この場合は電子メール) を渡す必要があったようです。私のエンティティ Customer には _toString メソッドが実装されているため、理由はわかりませんが、少なくともそのようにうまく機能します。

于 2012-10-02T21:34:13.647 に答える
1

一度に複数回リダイレクトすると、これが発生することに気付きました。ルートのコントローラーはMyBundle_index別のリダイレクトを返しますか? もしそうなら、それがあなたの答えだと思います。

それ以外の場合は、フォワードを使用してみてください。それ以外の:

return new RedirectResponse($this->generateUrl('MyBundle_index'));

...そのルートに定義されているコントローラー/アクションに転送するだけです:

return $this->forward("SomeBundle:Default:index");

ユーザーが最終的にアドレス バーに表示する URL は、期待したものとは異なる場合があります (ユーザーが最初に要求したものから変更されることはありません)。

于 2012-10-01T20:47:55.177 に答える