2016-03-18 12 views
2

を通過するのを拒否しました。AngfularのフロントアプリケーションとSymfony2のREST APIバックエンドを持つプロジェクトをビルドしました(2.7、すぐに3.3に移行する必要があります)。 バックエンド側では、FOSRestBundle、FOSUSerBundle、LexikAuthBundleを使用しています。また、REST APIのニーズに対応する他のクールなバンドルもあります。 私は最近、ソーシャルプロバイダのGoogleとFacebook(フロントログインボタン、その後fos_userバックエンド側を作成し、LexikBundleによって提供されたJWTだけを認知したユーザーに手動で設定する)を通じて一度ログインしました。これは、次のapp\config\security.ymlでうまく動作:Access_Controlは、匿名トークンのユーザーが

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] } 

これは/ API /ログイン/社会的なルートの正常に動作します(データは、本体、POSTである場合)が、到達することは不可能/ API /登録:(:

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)"} 

私はそれを得る、匿名のトークンが設定されているので!なぜACCESS_CONTROLのdoesnt/API /登録アクセスを聞かせて私のコントローラ?私は何をしないのですいけない? 私がすることもでき、ポストFOSRestBundleコンフィグそれが役立つ可能性がある場合。

感謝、Bor。

答えて

1

あなたaccess_controlディレクティブでタイプミスがあります:

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

...

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

OK感謝しなければなりません!私はこのタイプミスをしていました。私はこれを投稿した直後に見て削除しました。しかし、それはどちらかの仕事をしなかった...私はPCを再起動し、統合されたPHPサーバーを再起動し、今は期待どおりに動作するようだ。 security.ymlはdev環境にキャッシュされ、クリア:キャッシュは問題を解決しましたか? – bohr

+0

はいタイプミスを修正する**と後でキャッシュをクリアする組み合わせはそれを解決しているはずです:) – nifr

関連する問題