Im Bau eines Projekts mit einer Front-App in Angular und einem REST-API-Backend in Symfony2 (2.7, muss bald auf 3.3 verschieben). Backend-Seite, verwende ich FOSRestBundle, FOSUSerBundle, LexikAuthBundle und eine Reihe anderer cooler Bundles für REST API Bedürfnisse. Ich habe vor kurzem eine einmalige Anmeldung über soziale Anbieter Google und Facebook (Front-Login-Schaltflächen, dann erstellen fos_user Backend-Seite und manuell auf nur erkannte Benutzer, ein JWT von LexikBundle zur Verfügung gestellt) implementiert. Das funktioniert gut mit den folgenden app\config\security.yml
:Access_Control weigert sich, anonyme Token-Benutzer durch
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] }
Dies funktioniert gut für/api/login/soziale Routen (wo Daten in Körpern, POST), aber unmöglich zu erreichen/api/Anmeldung :(:
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)"}
ich nicht, dass es, da die anonymen Token gesetzt! Warum access_control doesnt lassen/api/Registrierung Zugang meines Controller? Was ich vermisse? kann ich auch Post FOSRestBundle Config, ob es helfen kann.
Dank , Bor.
OK Dank sein sollte! Ich hatte diesen Tippfehler, den ich gesehen und entfernt habe, nachdem ich diesen Artikel gepostet habe. Aber es hat auch nicht funktioniert ... Ich habe den PC neu gestartet und den integrierten PHP-Server neu gestartet und es scheint jetzt wie erwartet zu funktionieren. Wird security.yml in dev environment zwischengespeichert und ein clear: cache hätte das Problem gelöst? – bohr
ja die Kombination von Tippfehler ** und ** Löschen des Caches sollte danach gelöst haben :) – nifr