0

Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager の関数 authenticate() 内にコードを追加したいと思います。

セキュリティ バンドルの子バンドルを作成しようとしました。そして、このバンドルで security.authentication.manager のサービスをそのように再定義しました

    <!-- Authentication related services -->
    <service id="security.authentication.manager" class="%security.authentication.manager.class%" public="false">
        <argument type="collection" />
    </service>

しかし、ページを参照すると、フレームワークは例外をスローします: InvalidArgumentException: You must add at least one authentication providers.

依存関係が親バンドル構成内に作成されているためだと思います。

セキュリティバンドル全体を再定義せずに機能させるにはどうすればよいですか? ありがとうございました。

4

2 に答える 2

0

独自のハンドラーを作成する方がよいと思います。

  1. サービスを作成する必要があります
  2. サービスコンテナに登録します。
  3. にハンドラーを設定するだけsecurity.ymlです:
form_login:
    success_handler: success_login_handler
    failure_handler: failure_login_handler
logout:
    success_handler: success_logout_handler
于 2012-06-05T10:17:09.930 に答える
0

わかりました。最良の方法は、symfony2 の formFactory を拡張する独自のファクトリを作成することです。

次に、DaoAuthenticationProvider を拡張して抽象サービスとして宣言する独自の AuthentificationProvider を作成する必要があります。

次に、メソッド createAuthProvider() を使用してファクトリ内にサービスを作成し、必要なパラメーターを置き換えます。

protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId)
{
    $provider = 'acme.authentication.provider.dao.'.$id;
    $container
        ->setDefinition($provider, new DefinitionDecorator('acme.authentication.provider.dao'))
        ->replaceArgument(0, new Reference($userProviderId))//replace args on the service constructor
        ->replaceArgument(2, $id)
        ->addArgument(new Reference('acme.api'))//add some args to the service constructor
    ;

    return $provider;
}
于 2012-06-06T14:38:51.927 に答える