2016-03-18 24 views
2

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.

Antwort

1

Es gibt einen Typo in Ihrer access_control Richtlinie:

- { path: ^/api/registration., roles: ['..'] } 

...

- { path: ^/api/registration, roles: ['..'] } 
+0

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

+0

ja die Kombination von Tippfehler ** und ** Löschen des Caches sollte danach gelöst haben :) – nifr

Verwandte Themen