En créant un projet avec une application frontale dans Angular et un backend API Symantony2 (2.7, doit bientôt passer à 3.3). Backend côté, j'utilise FOSRestBundle, FOSUSerBundle, LexikAuthBundle et un tas d'autres bundles cool pour les besoins de l'API REST. J'ai récemment mis en œuvre une fois Connectez-vous via les fournisseurs sociaux Google et Facebook (boutons de connexion avant, puis créer fos_user backend côté et manuellement défini à l'utilisateur juste reconnu, un JWT fourni par LexikBundle). Cela fonctionne bien avec les éléments suivants app\config\security.yml
:Access_Control refuse à un utilisateur de jeton anonyme de passer par
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_API: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/api/login
stateless: true
anonymous: true
form_login:
check_path: /api/login_check
login_path: /api/login
require_previous_session: false
username_parameter: username
password_parameter: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/api
stateless: true
anonymous: true
lexik_jwt:
authorization_header:
enabled: true
prefix: Bearer
query_parameter:
enabled: true
name: bearer
always_authenticate_before_granting: true
access_control:
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/registration., roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: [IS_AUTHENTICATED_FULLY, ROLE_API] }
Cela fonctionne bien pour/api/login/itinéraires sociaux (où les données sont dans le corps, POST), mais impossible d'atteindre/api/Enregistrement :(:
INFO - Matched route "myapp_security_register".
Context: {"route_parameters": {"_controller":"myapp\\CoreBundle\\Controller\\SecurityController::registerAction","_route":"myapp_security_register"},"request_uri":"http://127.0.0.1:8000/api/registration"}
INFO - Populated the TokenStorage with an anonymous Token.
ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: "You do not have the necessary permissions" at C:\projects\myappAPI\vendor\friendsofsymfony\rest-bundle\FOS\RestBundle\EventListener\AccessDeniedListener.php line 70
Context: {"exception":"Object(Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException)"}
Je ne l'obtenir, parce que le jeton anonyme est réglé! Pourquoi access_control ne marche pas nous/api/accès d'inscription mon contrôleur? Qu'est-ce que je manque? Je peux aussi config après FOSRestBundle si elle peut aider.
Merci , Bor
Merci OK! J'ai eu cette faute de frappe, que j'ai vu et enlevé juste après avoir posté ceci. Mais ça n'a pas fonctionné non plus ... J'ai redémarré PC et relancé le serveur php intégré et il semble fonctionner maintenant comme prévu. Est-ce que security.yml est mis en cache dans dev environnement et un clear: cache aurait résolu le problème? – bohr
oui la combinaison de la réparation de la faute de frappe ** et ** effacer le cache après aurait dû le résoudre :) – nifr