2017-03-13 7 views
0

symfonyのAccessDeniedExceptionはいつも私が理解していないページ

スロー新しいAccessDeniedException(「メッセージ」)をログインにリダイレクト常にログインページにリダイレクトします。

PS:私はFOSUserBundle、ここでsecurity.ymlファイルの内容を使用します。

security: 
    encoders: 
     ANDRY\UserBundle\Entity\User: sha512 

    role_hierarchy: 
     # Un admin hérite des droits d'auteur et de modérateur 
     # ROLE_ADMIN: [ROLE_AUTEUR, ROLE_MODERATEUR] 
     # On garde ce rôle superadmin, il nous resservira par la suite 
     # ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     # ROLE_EMPLOYER: ROLE_SEEKER 
     ROLE_ADMIN: [ROLE_EMPLOYER, ROLE_SEEKER, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     main: 
      id: fos_user.user_provider.username 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     # main_login: 
     #  pattern: ^/%locale%/login$ 
     #  anonymous: true 

     main: 
      pattern: ^/ 
      anonymous: true 
      provider: main 
      form_login: 
       login_path: fos_user_security_login 
       check_path: fos_user_security_check 
       default_target_path: /%locale% 
      logout: 
       path: fos_user_security_logout 
       target: /%locale% 
      remember_me: 
       secret: %secret% 

    access_control: 
     #  - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_SUPER_ADMIN] } 
+0

をファイアウォールの設定を変更する - あなたは、ログインの失敗やログインの失敗が毎回発生した後somwhere他にリダイレクトされるようにしたいですかたとえ資格が正しいと思われるとしても? –

+0

コードに新しいAccessDeniedException( 'message')をスローすると、ログインページにリダイレクトされますが、403メッセージをスローするようにします – Andry

答えて

0

symfonyのデフォルトの動作は、ファイアウォール設定からルートにログインし、認証されていない要求をリダイレクトすることです。これを変更するには、AccessDeniedHandlerInterfaceを実装する独自のアクセス拒否ハンドラを作成し、それを使用するようにファイアウォールを設定する必要があります。

サービスとして
class AccessDeniedHandler implements AccessDeniedHandlerInterface 
{ 
    public function handle(Request $request, AccessDeniedException $accessDeniedException) 
    { 
     // ... 

     return new Response($content, 403); 
    } 
} 

設定して、問題が明らかになっていないのsecurity.yml

firewalls: 
    default: 
     ... 
     access_denied_handler: you_access_denied_handler_service 
+0

**注**。ユーザが '@Security(" is_granted( 'IS_AUTHENTICATED_FULLY')) ')で完全に認証されているかどうかをチェックするとき、ハンドラは呼び出されません。そのためには、[このソリューション](https://stackoverflow.com/questions/17428987/what-is-the-best-way-to-notify-a-user-after-an-access-control-ルールリダイレクト/ 17432089#answer-17432089)。 – Mateusz

関連する問題