Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF]Symfony 3 - autentykacja
wiciu010
post 28.06.2016, 23:10:53
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

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


Próbuję zrobić logowanie użytkowników zgodnie z opisem http://symfony.com/doc/current/cookbook/se...y_provider.html

Niestety nijak mi to nie idzie.

Entity User.php mam zrobione jak w przykładzie. Tak samo baze danych. Próbowałem hasła trzymać jako bcrypt, md5 oraz plaintext i nic nie działa.

Plik security.yml

Kod
security:
    encoders:
        AppBundle\Entity\User: plaintext

    role_hierarchy:
        ROLE_ADMIN:       [ROLE_USER]

    providers:
        our_db_provider:
            entity: { class: AppBundle:User, property: username }

    firewalls:
        main:
            pattern:    ^/
            anonymous: ~
            provider: our_db_provider

            form_login:
                login_path: /
                check_path: /
            logout:
                 path:   /logout
                 target: /

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }


W formularzu przekazuję zmienne jako _username oraz _password czyli zgodnie z dokumentacją.

Kontroler do obsługi:

  1. public function indexAction(Request $request)
  2. {
  3. $session = $request->getSession();
  4.  
  5. $authenticationUtils = $this->get('security.authentication_utils');
  6.  
  7. $error = $authenticationUtils->getLastAuthenticationError();
  8.  
  9. $lastUsername = $authenticationUtils->getLastUsername();
  10.  
  11. if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')){
  12. return $this->redirect($this->generateUrl('admin_dashboard'));
  13. }
  14.  
  15. return $this->render('default/index.html.twig', [
  16. 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
  17. 'body_id' => "simple-page",
  18. 'last_username' => $lastUsername,
  19. 'error' => $error
  20. ]);
  21. }


Jak podam błędne dane do logowania to otrzymuję
Kod
exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Bad credentials.'


Jak podam poprawne to nie przekierowuje mnie do admin_dashboard i nie zwraca żadnego błędu. W debugu dalej jestem jako anonymous

W bazie mam rolę ROLE_ADMIN i takie też mam w getRoles zwracane w entity User.

Co jest nie tak?
Go to the top of the page
+Quote Post
punkomuzykant
post 29.06.2016, 07:35:22
Post #2





Grupa: Zarejestrowani
Postów: 147
Pomógł: 3
Dołączył: 28.12.2007
Skąd: toronto

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


A np to zmieniłeś ? Inaczej nie ma szans na przejscie do admin_dashboard
  1. public function getRoles()
  2. {
  3. return array('ROLE_USER');
  4. }

Go to the top of the page
+Quote Post
wiciu010
post 29.06.2016, 07:40:27
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

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


Cytat(punkomuzykant @ 29.06.2016, 08:35:22 ) *
A np to zmieniłeś ? Inaczej nie ma szans na przejscie do admin_dashboard
  1. public function getRoles()
  2. {
  3. return array('ROLE_USER');
  4. }


Mam tak:

  1. public function getRoles()
  2. {
  3. return array('ROLE_ADMIN');
  4. }


A powinno być ROLE_USER? Generalnie chciałbym, żeby role pobierał mi z rekordu w bazie. Mam w bazie pole roles w tabeli USER

Go to the top of the page
+Quote Post
punkomuzykant
post 29.06.2016, 07:58:45
Post #4





Grupa: Zarejestrowani
Postów: 147
Pomógł: 3
Dołączył: 28.12.2007
Skąd: toronto

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


Zerknij na fos user bundle i tam poszukaj metody getRoles, getSalt itp. W przykładzie encji który podałeś masz komentarze w niektórych miejscach.
Raczej coś w ten deseń
  1. return array('ROLE_USER', 'ROLE_ADMIN');


Ten post edytował punkomuzykant 29.06.2016, 08:00:01
Go to the top of the page
+Quote Post
wiciu010
post 29.06.2016, 08:42:35
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

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


Cytat(punkomuzykant @ 29.06.2016, 08:58:45 ) *
Raczej coś w ten deseń
  1. return array('ROLE_USER', 'ROLE_ADMIN');


Dzięki! Pomogło. Czyli muszę tutaj podawać wszystkie możliwe role użyte w aplikacji?
Go to the top of the page
+Quote Post
punkomuzykant
post 29.06.2016, 10:36:19
Post #6





Grupa: Zarejestrowani
Postów: 147
Pomógł: 3
Dołączył: 28.12.2007
Skąd: toronto

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


Cytat(wiciu010 @ 29.06.2016, 09:42:35 ) *
Czyli muszę tutaj podawać wszystkie możliwe role użyte w aplikacji?


Musisz raczej uznać że rola ROLE_USER jest podstawową rolą użytkownika zalogowanego. A pozostałe role powinieneś pobrać z bazy danych dla konkretnego usera. W fos user masz cos takiego np
  1. public function getRoles()
  2. {
  3. $roles = $this->roles;
  4. foreach ($this->getGroups() as $group) {
  5. $roles = array_merge($roles, $group->getRoles());
  6. }
  7. // we need to make sure to have at least one role
  8. $roles[] = static::ROLE_DEFAULT;
  9. return array_unique($roles);
  10. }

gdzie
static::ROLE_DEFAULT to ROLE_USER o ile pamietam.

fos user bundle user entity

Ten post edytował punkomuzykant 29.06.2016, 10:37:50
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: 26.04.2024 - 21:30