2013-04-09 22 views
11

私はsymfony2で認証が成功した後に何かを行う方法について、いまや情報を探しています。古いハッシュを使って認証が成功した直後にbcryptを使うようにユーザーパスワードを再ハッシュしたい。私はまだ正当なプレーンパスワードを持っているので、資格のチェックの直後でリダイレクトの前にする必要があります。symfony2のログイン成功直後でリダイレクトする前に何かしますか?

これを実現する手がかりはありますか?

Symfonyのイベントディスパッチャについて何かが見つかりましたが、私は が成功した認証の後にイベントがあるかどうかを見つけることができません。

私がこのやり方を間違って実行しようとしていて、より良いアプローチを提案している場合は、私を修正してください。

// EDIT

[OK]を私は、イベントだけで認証成功後に、それはsecurity.authentication.successと呼ばれています解雇ました。今ではこのイベントにアタッチできるようになりましたが、今ではバウンドコードのどこにイベントリスナーを付けるべきかわかりません。私はload()の方法の私の/src/Pkr/BlogUserBundle/DependencyInjection/PkrBlogUserExtension.phpでこれを行うべきですか?

答えて

28

ログイン成功時に実行されるログイン成功ハンドラを指定できます。例えば

、あなたのsecurity.yml

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      success_handler: my.security.login_handler 

今すぐSymfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterfaceを実装するクラスを作成し、ログインが成功の上に、あなたが必要なものは何でも、あなたが合うようにリダイレクトを処理することができます。

/** 
* 
*/ 
public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    // handle it and return a response 
} 

そして、新しく作成されたハンドラを使用して、バンドル、またはあなたのconfig.ymlであなたのservices.xmlの中でその名前を持つサービスを作成します。

私はもともとこのチュートリアル以下これを行う方法を見つけた:

グレート

http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

+0

、私はすぐにそれを試してみましょう:) – piotrekkr

+0

あなたのソリューションは、素晴らしい作品。最初は、ログイン成功イベントにアタッチされたイベントリスナーを試しましたが、リクエストオブジェクトがありませんでしたので、あなたのソリューションで簡単にアクセスできます:) – piotrekkr

+0

私は$ request-> headers-> get 'referer')が私のログインページに設定されました。ユーザーがログインページにリダイレクトされる前に*要求されたページを取得する方法を知りたいですか? – adavea

関連する問題