Witam.
Od 2 tygodni marzę o tym, by wreszcie zamknąć temat logowania z symfoni. Otóż mój serwis jest oparty w całości na REST'cie. Czyli Ajaxem wysyłam żądania do serwera.
Tak więc tak samo chcę zrobić logowanie. Już myślałem że wszystko już mam za sobą... ale nie do końca. Moje logowanie w PHP wygląda tak:
$token = new UsernamePasswordToken($user, $user->getPassword(), "main", $user->getRoles());
$this->get("security.context")->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
$this->get('event_dispatcher')->dispatch(AuthenticationEvents::AUTHENTICATION_SUCCESS, new AuthenticationEvent($token));
Działa w 50% , bo mam dostęp w kontrolerze do $this->getUser(), annotacje nawet działają
@Sensio\Bundle\FrameworkExtraBundle\Configuration\Security("has_role('ROLE_USER')")
Tak więc jeśli nie jest zalogowany, to wyrzuca mi błąd AccessDanied - wszystko pozytywnie.
Lecz gdy chcę wywołać w kontrolerze
$this->get('security.context')->isGranted('ROLE_USER')
To symfoni wyrzuca błąd:
No Authentication Provider found for token of class "Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken".
Nie rozumiem, że w annotacjach wszystko ładnie działa, ale jak już chcę skorzystać z serwisu, to wywala mi ten błąd.
Ja nie chce żadnych "firewalli" w symfoni - chcę wszystko sam obsługiwać, poprzez annotacje przy kontrolerach, ewentualnie w kontrolerze.
Mój secruity config wygląda tak:
security:
encoders:
XXXX\Bundle\UserBundle\Entity\User:
algorithm: bcrypt
role_hierarchy:
ROLE_ARTIST: [ROLE_USER]
ROLE_STUDIO: [ROLE_USER]
ROLE_ADMIN: [ROLE_USER, ROLE_POST_MODERATOR]
ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ROLE_POST_MODERATOR ]
providers:
users:
entity: { class: XXXUserBundle:User, property: username }
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
default:
anonymous: ~
Miał ktoś styczność z takim błędem? Czemu logowanie jest takie trudne w symfonii...