12

symfony2で認証が成功した後に何かを行う方法について、しばらくの間、情報を探しています。古いハッシュを使用して認証が成功した直後に、bcrypt を使用するようにユーザー パスワードを再ハッシュしたいと考えています。有効なプレーン パスワードがまだあるときにこれを行う必要があるため、資格情報チェックの直後でリダイレクトの前にする必要があります。

それを達成する方法の手がかりはありますか?

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

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

//編集

OK、認証が成功した直後に発生するイベントを見つけました。これはsecurity.authentication.success. これで、このイベントにアタッチできるようになりましたが、バインド コードのどこにイベント リスナーをアタッチすればよいかわかりません。/src/Pkr/BlogUserBundle/DependencyInjection/PkrBlogUserExtension.phpinload()メソッドでそれを行う必要がありますか?

4

1 に答える 1

31

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

たとえば、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
}

次に、バンドルの services.xml にその名前のサービスを作成するか、新しく作成したハンドラーを使用して config.yml にサービスを作成します。

私はもともとこのチュートリアルに従ってこれを行う方法を見つけました:

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

于 2013-04-09T19:15:12.427 に答える