2013-04-09 12 views
11

Szukam teraz trochę czasu, na wszelkie informacje, jak zrobić coś po powodzeniu uwierzytelniania w symfony2. Chcę ponownie hasło użytkownika, aby użyć bcrypt tuż po pomyślnym uwierzytelnieniu przy użyciu starego hash. Muszę to zrobić, gdy nadal mam poprawne hasło, więc powinno to być po sprawdzeniu poświadczeń i przed przekierowaniem.Czy coś po sukcesie logowania symfony2 i przed przekierowaniem?

Jakieś wskazówki, jak to osiągnąć?

Znalazłem coś na temat dyspozytora wydarzeń w Symfony, ale nie może znaleźć, czy jest jakieś zdarzenie po udanym uwierzytelnieniu.

Proszę mnie poprawić, jeśli próbuję zrobić to w niewłaściwy sposób i zaproponować lepsze podejście.

// EDIT

Ok znalazłem wydarzenie zwolniony tuż po sukcesie auth, który nazywa security.authentication.success. Mogę teraz dołączyć do tego wydarzenia, ale teraz nie jestem pewien, w którym miejscu w moim kodzie granicznym powinienem dołączyć mój detektor zdarzeń? Czy powinienem to zrobić w metodzie /src/Pkr/BlogUserBundle/DependencyInjection/PkrBlogUserExtension.php w load()?

Odpowiedz

28

Możesz określić obsługę powodzenia logowania, która zostanie wykonana po pomyślnym zalogowaniu.

Na przykład, security.yml

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

Teraz utworzyć klasę, która implementuje Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface i po pomyślnym zalogowaniu, możesz robić, co trzeba i obsłużyć przekierowanie jak widać pasuje.

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

Następnie utwórz usługę o tej nazwie w pliku services.xml dla swojego pakietu lub w pliku config.yml za pomocą nowo utworzonej procedury obsługi.

pierwotnie okazało się, jak to zrobić po tym tutorialu:

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

+0

Świetnie, będę go wypróbować wkrótce :) – piotrekkr

+0

Twoje rozwiązanie działa świetnie. Najpierw próbowałem z detektorem zdarzeń dołączonym do zdarzenia powodzenia logowania, ale potem nie miałem obiektu żądania tak łatwo dostępnego jak w twoim rozwiązaniu :) Dziękuję za pomoc – piotrekkr

+0

Kiedy próbowałem to znalazłem $ request-> headers-> get() "referer") został ustawiony na moją stronę logowania. Masz pomysł, jak uzyskać żądaną stronę * przed * użytkownik został przekierowany na stronę logowania? – adavea

Powiązane problemy