Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF]Symfony 3 - autentykacja
Forum PHP.pl > Forum > PHP > Frameworki
wiciu010
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?
punkomuzykant
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. }

wiciu010
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

punkomuzykant
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');
wiciu010
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?
punkomuzykant
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
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.