7

私のSymfony2カスタム認証プロバイダーは現在機能しているようです。

ユーザープロバイダー

私はほとんどFOSUserBundleを使用しましたが、ユーザーの電子メールアドレスすら持っておらず、追加の機能や複雑さも必要ありません。

代わりに、エンティティプロバイダーを使用しています。

APIクライアントライブラリがそれを処理するため、エンコーダーをプレーンテキストに設定しましたが、残念ながら、別の問題があります。ユーザーはこれらのユーザーレコードに対して認証されているようです。

エンティティユーザープロバイダーを実装する前に、ログインフォームから有効な応答が返されました。正しいクレデンシャルではエラーは発生せず、不正なクレデンシャルではカスタムの「不正なユーザー/パスエラー」が発生しました。

これで、正しいことがわかっているクレデンシャルを指定しても、UserAuthenticationProviderを実装しているかのように、「不正なクレデンシャル」というエラーメッセージが表示されるだけですが、私の知る限りでは、そうではありません。私のカスタムプロバイダーは、AuthenticationProviderInterfaceを直接実装しています。

そのため、現時点では、エンティティユーザープロバイダーを誤って実装しているため、カスタム認証プロバイダーが何らかの形でオーバーライドされていると思います。エンティティユーザープロバイダーとカスタム認証プロバイダーを同時に構成する正しい方法は何ですか?

ファイル

security.ymlの関連セクション

encoders:
    WordRot\PlayBundle\Entity\User: plaintext

providers:
    wordnik_users:
        entity: { class: WordRotPlayBundle:User, property: username }

firewalls:
    wordnik_secured:
        pattern: ^/play
        logout: ~
        anonymous: ~
        # The next line specifies the custom authentication provider:
        wordnik: true 
        form_login:
            provider: wordnik_users
            login_path:  /login
            check_path:  /play_check
            # on success
            always_use_default_target_path: true
            default_target_path: /play

編集

これは役に立つかもしれません。マスターブランチの差分です...

  • カスタム認証プロバイダー(WordnikProvider)がまだ実行されたときから(a473d354)
  • マスターブランチ( ddcfeae2)での最新のコミットに対して、認証プロバイダーは実行されなくなります。

編集2

私が発見したより多くのブレークポイントで:

  1. ログインフォームPOSTで、WordnikProvider#supportsがUsernamePasswordTokenで呼び出されているため、が返されfalseます。
  2. ログインフォームPOSTで、WordnikListenerが作成されますが、他のメソッド(attemptAuthenticationrequiresAuthentication)は呼び出されません。それでもWordnikFactory#createListener、また、決して呼ばれることはありません!リスナーが構築されているのは不思議です。
  3. ただし、login_checkGETでは、WordnikListener#requiresAuthenticationISが呼び出されます。
4

1 に答える 1

1

それで、私たちはこれについてちょっと長い議論をしました。基本的な問題は、form_loginサービスがwodnikサービスに干渉していたことでした。form_loginを削除すると、動作が改善され始めました。

https://chat.stackoverflow.com/rooms/25251/discussion-between-montgomery-jean-and-cerad

于 2013-02-28T01:38:55.520 に答える