2011-11-03 12 views
5

Używanie „normalny” - nie „zapamiętaj mnie” uwierzytelnianie - mogę ustawić sukcesem a porażką teleskopowe, dodając do tego pliku security.yml:Jak mogę odsłuchać zdarzenia ponownego uwierzytelnienia "zapamiętaj mnie" w Symfony2?

form_login: 
    # ... 
    success_handler: authentication_handler 
    failure_handler: authentication_handler 

Ale nie mogłem znaleźć drogę do słuchania dla „pamiętać mnie "ponowne uwierzytelnianie, gdy sesja użytkownika wygasła, a ciasteczko" zapamiętaj mnie "jest używane do ponownego uwierzytelnienia się. Jakieś pomysły na to, jak mogę to osiągnąć?

Odpowiedz

0

Nie próbowałem tego, ale może mógłbyś dołączyć słuchacza do success_handler, ale upewnij się, że wstrzykujesz usługę SecurityContext przez <argument> w usłudze config.

Następnie, wkrótce po wprowadzeniu Ci metodę usługi zrobić:

if ($this->securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')){ 
    // I am remembered visitor 
}else{ 
    // I am the new visitor 
} 

Ponownie, jest to tylko pomysł, ale brzmi jak może to zrobić ...

+0

Problem polega na tym, że 'success_handler' dołączony do' form_login' nie jest wywoływany, gdy użytkownik jest ponownie logowany przez ciasteczko "zapamiętaj mnie". –

2

Tworzenie słuchacza do interactive_login zdarzenie. To się uruchamia zarówno w loginie prostej, jak i "zapamiętaj mnie" (zobacz Symfony\Component\Security\Http\Firewall\RememberMeListener.php @line: 77).

W odbiorniku można oddzielić dwa, sprawdzając plik cookie. Możesz znaleźć więcej informacji na temat słuchacza here.

+0

Dziękuję za odpowiedź. Teraz nie potrzebuję tej funkcji, ale kiedy będę jej potrzebować, wypróbuję Twoje rozwiązanie, aby sprawdzić, czy to działa. –

+0

Należy zauważyć, że to, mimo że działa, nie daje dostępu do obiektu Response. – Putr