2015-06-06 18 views
5

Śledziłem this tutorial z Książki Symfony, aby zarządzać moimi użytkownikami.Wyświetlanie wiadomości flash po zalogowaniu się/wylogowaniu

Teraz chciałbym ustawić wiadomość flash po pomyślnym zalogowaniu LUB, jeśli ktoś próbuje uzyskać dostęp do zabronionego obszaru.

Rozumiem, że uwierzytelnianie i autoryzacja nie są zarządzane wewnątrz kontrolerów. W konsekwencji nie wiem, gdzie umieścić mój kod, aby wyświetlić prosty komunikat "Przepraszamy, nie masz połączenia".

Odpowiedz

2

Zajmie to trochę czasu i trochę kodu tylko po to, aby wyświetlić prostą wiadomość. Jeśli chcesz to zrobić przez Symfony sposób należy spojrzeć na konfigurację zabezpieczeń this pierwszy, zwłaszcza te z nich:

  1. entry_point (poniżej zapory) - która zwykle przekierowuje użytkowników do strony logowania, gdy próbują uzyskać dostęp do stron zabezpieczonych. Tutaj możesz ustawić wiadomości flash.
  2. success_handler pod form_login (jeśli używasz go), aby pokazać swoje pomyślne wiadomość Logowanie
  3. success_handler pod logout pokazać Twoja wiadomość Wyloguj

Niektóre nazwy:

+0

Dziękuję bardzo. Myślę, że użyję metody 'success_handler'. Teraz myślę o stworzeniu nowej usługi o nazwie FlashMessages, która obsłużyłaby większość wiadomości flash używanych w mojej aplikacji. Ale na razie walczę o stworzenie i zarejestrowanie tej usługi. – Creasixtine

+1

@LeBarde Tworzenie usług i korzystanie z nich jest bardzo proste. Przeczytaj o nich [tutaj] (http://symfony.com/doc/current/book/service_container.html). – xurshid29

+0

Dzięki @ xurshid29 za odpowiedź. Teraz mam swoje usługi. Teraz mam usługę 'LoginSuccessHandler'. Ale tutaj '$ request-> getUser()' jest 'null' wewnątrz metody' onAuthenticationSuccess() '. Nie mogę zrozumieć, dlaczego. Ciągle szukam ... – Creasixtine

2

Możesz uzyskać dostęp do SecurityContext ze swojego Controller. Tak więc, zakładając swój obszar zakazany wymaga rolę SOME_ROLE, można zrobić coś takiego:

if (!$this->get('security.context')->isGranted('SOME_ROLE')) { 
    $this->get('session')->getFlashBag()->add('error', 'Access forbidden'); 
    // maybe return a RedirectResponse to another page the user can access... 
} 

Należy pamiętać, że SecurityContext została zaniechana od Symfony 2.6. Nadal będzie działać, ale jeśli chcesz się nauczyć dostosowywać do przyszłych wersji, możesz sprawdzić this.

chodzi o wiadomości, gdy użytkownicy są/nie jesteś zalogowany, możesz użyć AuthorizationChecker, bardzo podobny do poprzedniego:

if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) { 
    // Add flash message here... 
} 

można znaleźć więcej informacji here.

Powiązane problemy