Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony]Symfony 2 - własne logowanie
lukaszp26
post 16.01.2013, 18:56:58
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.01.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
-=Peter=-
post 16.01.2013, 19:20:35
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Tak się w sf2 autoryzacji nie robi wink.gif http://symfony.com/doc/current/book/security.html


--------------------
Go to the top of the page
+Quote Post
piotr.pasich
post 17.01.2013, 08:48:49
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 4
Dołączył: 27.01.2012
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Polecam skorzystanie z gotowego https://github.com/FriendsOfSymfony/FOSFacebookBundle . Da się na prawdę customizowwać pod każdym kątem.

Piotr


--------------------
Zapraszam do głosowania na agendę PHPCon Poland 2013 http://www.phpcon.pl/2013/pl/agenda.

---
Piotr Pasich
piotr.pasich@xsolve.pl
www.xsolve.pl
Go to the top of the page
+Quote Post
lukaszp26
post 17.01.2013, 09:55:39
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.01.2013

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
netmare
post 17.01.2013, 15:42:32
Post #5





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.08.2025 - 12:28