Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Symfony 2 - własne logowanie
Forum PHP.pl > Forum > PHP > Frameworki
lukaszp26
Koledzy mam problem z logowaniem w symfony2.
zrobiłem prostą metodę logującą w kontrolerze:

  1. public function checkAction()
  2. {
  3. $request = $this->getRequest();
  4. $session = $request->getSession();
  5.  
  6. $login = $request->request->get('login');
  7. $haslo = $request->request->get('haslo');
  8.  
  9. if($login && $haslo){
  10. $em = $this->getDoctrine()->getManager();
  11. $query = $em->createQuery('SELECT a FROM CmsAdminBundle:Admin a WHERE a.login = :login AND a.haslo = :haslo');
  12. $query->setParameters(array(
  13. 'login' => trim($login),
  14. 'haslo' => md5(trim($haslo))
  15. ));
  16. try{
  17. $admin = $query->getSingleResult();
  18. } catch (\Doctrine\Orm\NoResultException $e){
  19. $admin = null;
  20. }
  21.  
  22. if($admin){
  23. $user = new \Symfony\Component\Security\Core\User\User($admin->getLogin(), $admin->getHaslo(), array('ROLE_ADMIN'));
  24. $token = new \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken($user, null, 'secured_area_admin', $user->getRoles());
  25.  
  26. $this->container->get('security.context')->setToken($token);
  27. $session->set('_secured_area_admin', serialize($token));
  28.  
  29. $this->get('session')->getFlashBag()->add('good', 'jest taki user');
  30.  
  31.  
  32.  
  33. } else {
  34. $this->get('session')->getFlashBag()->add('error', 'Nie ma takiego usera');
  35. }
  36.  
  37. } else {
  38. $this->get('session')->getFlashBag()->add('error', 'podaj login i hasło');
  39. }
  40.  
  41. return $this->render('CmsAdminBundle:Default:login.html.php', array('options' => $this->options));
  42. }


Po jej wykonaniu wszystko jest OK. Na belce developera mam info, ze jestem zalogowany i posiadam "ROLE_ADMIN".
Niestety po przejściu na inną podstronę (nawet wyswietlenie z powrotem formu logującego) powoduje, że otrzymama rola znika. I do zabezpieczonych podstron znowu musz się logować.
Ktoś wie co robie żle?
-=Peter=-
Tak się w sf2 autoryzacji nie robi wink.gif http://symfony.com/doc/current/book/security.html
piotr.pasich
Polecam skorzystanie z gotowego https://github.com/FriendsOfSymfony/FOSFacebookBundle . Da się na prawdę customizowwać pod każdym kątem.

Piotr
lukaszp26
to ja wiem, ze sie tak nie robi, ale uzywając FOS-a praktycznie jestem skazany tylko na tabele o nazwie users a tam polach username i password. A chcialbym np. robić autoryzacje uzytkownikow z tabeli admini z polami login i haslo. A w dokumentacji tego nie ma...
netmare
Nie dawno stałem przed tymi samymi problemami i da się zrobić własne logowanie. To czego potrzebujesz to określenia w security.yml w którymś firewallu sekcji form_login, gdzie definiujesz login path i podstawiasz statyczny formularz logowania w twigu, check_path które musi mieć ścieżkę niedostepną dla niezalogowanego użytkownika i symfony obsłuży to w "magiczny" sposób. Dalej w providerach zastępujesz provider memory jakimś providerem swoim który jest po prostu doctrinowym entity. Jeśli entity nie wystarcza masz możliwość zaimplementowania UserProviderInterface.
Tu jest wszystko opisane:
http://symfony.com/doc/2.0/book/security.html
http://symfony.com/doc/2.0/cookbook/security/index.html

Z moich dzisiejszych zmagań z logowaniem: Wyłapanie błędnych prób logowania załatwia usługa implementująca AuthenticationFailureHandlerInterface, którą wskazujesz w form_login jako failure_handler.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.