0

ログインまたは認証なしでアクセスできるアプリのパブリック領域があり、コントローラーでこのコードを実行すると、期待どおりif ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))に取得trueされます。

次に、次のように定義されたサービスがあります。

main.services:
    class: App\MainBundle\Services\MainServices
    arguments: [ @doctrine.orm.entity_manager, @security.context, @service_container ]

しかし、このコードを実行すると:

public function __construct(EntityManager $em, SecurityContext $securityContext, Container $container) {
    $this->em = $em;
    $this->container = $container;
    $this->securityContext = $securityContext;

    error_log("MAIN");
    if ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
        error_log("MAIN Anon");
    else
        error_log("MAIN no anon");
}

例外があります:

メッセージ「セキュリティ コンテキストには認証トークンが含まれていません。考えられる理由の 1 つは、この URL にファイアウォールが構成されていないことです。

サービスは、コントローラーの最初のコマンドの直後に呼び出されます。

ありがとうございました

4

2 に答える 2

3

このエラーは、セキュリティ トークンが作成される前にサービスが初期化されたときに発生する可能性があります。コンストラクターでアクセスをチェックしないようにしてください。このチェックをコントローラーから呼び出されるメソッドに移動してください。

于 2014-07-31T13:08:51.137 に答える