8

複数のユーザープロバイダーを1つのプロバイダーに設定できない理由を理解しようとしています。現在、ACLを構成しています。ユーザープロバイダーの場合、「ハードコードされた」ユーザーとデータベースからロードされるユーザーが必要です。

ドキュメントを読むと、 2つのユーザープロバイダー(1つはin_memoryユーザー用、もう1つはユーザー用)を用意する必要はないと記載されていdatabaseます。それらを単一のユーザープロバイダーに組み合わせることができるはずです(これが私がやろうとしていることです)。

推奨される構成は次のとおりです。

security:
    providers:
        main_provider:
            memory:
                users:
                    foo: { password: test }
            entity:
                class: Acme\UserBundle\Entity\User,
                property: username

私の構成は次のとおりです。

security:
    providers:
        main_provider:
            memory:
                users:
                    foo: { password: test }
            entity:
                class: Company\EntitiesBundle\Entity\User,
                property: username

残念ながら、この例外が発生します。

InvalidConfigurationException: Invalid configuration for path "security.providers.main_provider": You cannot set multiple provider types for the same provider

ただし、2つの異なるプロバイダーを設定してチェーンすると、問題なく機能します。なぜこれが起こるのか理解できませんか?ドキュメントに明確に記載されています- you can accomplish this even more easily by combining the two sources into a single provider
ここで何が欠けていますか?

4

2 に答える 2

3

プロバイダーをチェーン化しないのはなぜですか? あなたが参照しているドキュメントには、複数のユーザー プロバイダーを使用できると記載されています

http://symfony.com/doc/current/book/security.html#using-multiple-user-providers

各認証メカニズム (HTTP 認証、フォーム ログインなど) は 1 つのユーザー プロバイダーを使用し、デフォルトでは最初に宣言されたユーザー プロバイダーを使用します。 しかし、構成によって少数のユーザーを指定し、データベース内の残りのユーザーを指定したい場合はどうでしょうか? これは、この 2 つをチェーンする新しいプロバイダーを作成することで可能になります。

これで、すべての認証メカニズムがchain_providerを使用します。最初に指定されたからです。chain_providerは、 in_memoryプロバイダーuser_dbプロバイダーの両方からユーザーをロードしようとします

チェーンプロバイダーをセットアップするだけです。

# app/config/security.yml
安全:
    プロバイダー:
        メインプロバイダー:
            鎖:
                プロバイダー: [memory_provider、entity_provider]
        メモリープロバイダー:
            メモリー:
                ユーザー:
                    foo: { パスワード: テスト }
        entity_provider:
            実在物:
                クラス: Company\EntitiesBundle\Entity\User
                プロパティ: ユーザー名
于 2014-01-09T21:10:49.897 に答える
-2

どのバージョンの Symfony を使用していますか? 2.0 の場合、2.0 のドキュメントでは構成が若干異なります。

# app/config/security.yml
security:
    providers:
        main_provider:
            users:
                foo: { password: test }
            entity: { class: Acme\UserBundle\Entity\User, property: username }

memoryキーがないことに注意してください。

于 2012-12-08T23:26:59.600 に答える