3

私はSymfony2.1でカスタム認証システムに取り組んできました。Symfonyとの多くの戦いの後、私はうまくいくものを手に入れましたが、完全には機能していません...

問題:(フォームを介した)ログイン後、ユーザーはログに記録されますが、認証されません。

コンテキスト:ユーザーはHTMLフォームを介して資格情報を送信する必要があるため、を拡張するリスナーを作成する必要がありましたAbstractAuthenticationListener

質問:リスナーはトークンを自動的に追加するべきではありませんSecurityContextか?そうでない場合は、手動で行う必要がありますか?

プロセス

ユーザーはHTMLフォームを介して自分の資格情報を送信します

リスナーはリクエストをインターセプトし、attemptAuthenticationを実行します

リスナーはAuthenticationManagerの(AuthenticationProviderInterfaceを実装する)認証メソッドを呼び出します

AuthenticationManagerはUserProviderを呼び出し(UserProviderInterfaceを実装)、Webサービスからユーザーのデータを取得します。

UserProviderは、UserInterfaceを実装するUserクラスを返します

AuthenticationManagerは、TokenInterfaceを実装するトークンを作成します。

AuthenticationManagerはトークンをリスナーに返します。

リスナーのattemptAuthenticationは、AuthenticationManagerのメソッドからトークンを返します:authenticate

ユーザーはログに記録されますが、認証されていません。

投稿の過負荷を避けるためのコードサンプルは示していません。必要に応じて投稿を編集します。

4

1 に答える 1

2

間違いを見つけました...

ログインするとAuthenticationSuccessHandler、ユーザーを必要なURLにリダイレクトします。このアクションは、UserProviderからrefreshUserをトリガーします。

この関数は、ログインに使用したユーザーとは異なるテストユーザーでハードコーディングされています。関数がトークンに格納されているユーザーと等しいユーザーを返すと、問題は解決されます。

于 2013-03-27T13:39:55.627 に答える