2015-09-13 43 views
0

我創建多個providers.One提供商奏鳴曲管理安全和其他供應商定製前臺用戶正確路線的多個供應商 - Symfony2的安全

security: 
encoders: 
    FOS\UserBundle\Model\UserInterface: bcrypt 

providers: 
    fos_userbundle: 
     id: fos_user.user_manager 
    database_users: 
     entity: { class: MyBundle:Users, property: username } 
firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    admin: 
     pattern:   /admin(.*) 
     context:   user 
     form_login: 
      provider:  fos_userbundle 
      login_path:  /admin/login 
      use_forward: false 
      check_path:  /admin/login_check 
      failure_path: null 
     logout: 
      path:   /admin/logout 
     anonymous:   true 
    main: 
     pattern:  .* 
     form-login: 
      provider:  fos_userbundle 
      login_path:  /login 
      use_forward: false 
      check_path:  /login_check 
      failure_path: null 
     logout:  true 
     anonymous: true 
    secured_area://created for custom frontend user 
     pattern: ^/ 
     anonymous: true 
     form_login: 
      provider: database_users 
      check_path: /security/login_check 
      login_path: /security/login 
      #csrf_provider: security.csrf.token_manager 
      default_target_path: voters_list 
      always_use_default_target_path: true 

     logout: 
      path: logout 
      target: homepage 
access_control: 
    # The WDT has to be allowed to anonymous users to avoid requiring the login with the AJAX request 
    - { path: ^/wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

    # AsseticBundle paths used when using the controller for assets 
    - { path: ^/js/, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/css/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

    # URL of FOSUserBundle which need to be available to anonymous users 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } # for the case of a failed login 
    - { path: ^/user/new$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/check-confirmation-email$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/confirm/, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/confirmed$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/request-reset-password$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/send-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/check-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/user/reset-password/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

    # Admin login page needs to be accessed without credential 
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

    # Secured part of the site 
    # This config requires being logged for the whole site and having the admin role for the admin part. 
    # Change these rules to adapt them to your needs 
    - { path: ^/admin/, role: ROLE_ADMIN } 
    - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 


role_hierarchy: 
    ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN] 
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
    SONATA: 
     #- ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented 

acl: 
    connection: default 

我有奏鳴曲管理沒有問題,其設置由FOSUserBundle,但自定義前端用戶拋出錯誤

異常被模板(「無法生成命名路由的URL‘安全/ login_check’這樣路線的渲染過程中引發不存在

裏面我的應用程序/ routing.yml中,我輸入自定義前端用戶

Custom_security: 
resource: "@MyBundleBundle/Resources/config/routing/security.yml" 
prefix: /security 

而且MyBundle路由

login_check: 
path: /login_check 
#defaults: { _controller: MyBundle:Security:loginCheck } 

logout: 
    path: /logout 

login_user: 
    path: /login 
    defaults: { _controller: MyBundle:Security:login } 

我感到困惑中創建的路由爲什麼Symfony的拋出異常錯誤,我在config/routing.yml中導入了MyBundle路由 而我的登錄表單看起來像這樣

<form action="{{ path('security/login_check') }}" name="form" id="form" class="form-horizontal" enctype="multipart/form-data" method="POST"> 
    <div class="input-group"> 
     <span class="input-group-addon"><i class="fa fa-user"></i></span> 
     <input type="text" id="username" name="_username" value="{{ last_username }}" class="form-control" placeholder="username" required autofocus/>      
    </div> 
    <div class="input-group"> 
      <span class="input-group-addon"><i class="fa fa-lock"></i></span> 
      <input type="password" id="password" name="_password" class="form-control" placeholder="Password" required/> 
    </div>                 
    <div class="form-group"> 
     <!-- Button --> 
    <div class="col-sm-12 controls"> 
     <button type="submit" href="#" class="btn btn-primary pull-right"><i class="fa fa-log-in"></i> Log in</button> 
    </div> 
    </form>  

更新

我改變我的形式進入

<form action="{{ path('login_check') }}" name="form" id="form" class="form-horizontal" enctype="multipart/form-data" method="POST"> 
    <div class="input-group"> 
     <span class="input-group-addon"><i class="fa fa-user"></i></span> 
     <input type="text" id="username" name="_username" value="{{ last_username }}" class="form-control" placeholder="username" required autofocus/>      
    </div> 
    <div class="input-group"> 
      <span class="input-group-addon"><i class="fa fa-lock"></i></span> 
      <input type="password" id="password" name="_password" class="form-control" placeholder="Password" required/> 
    </div>                 
    <div class="form-group"> 
     <!-- Button --> 
    <div class="col-sm-12 controls"> 
     <button type="submit" href="#" class="btn btn-primary pull-right"><i class="fa fa-log-in"></i> Log in</button> 
    </div> 
    </form> 

而且還路由裏面MyBundle

login_check: 
    path: /login_check 
    defaults: { _controller: MyBundle:Security:loginCheck } 

    logout: 
    path: /logout 

    login_user: 
    path: /login 
    defaults: { _controller: MyBundle:Security:login } 

開創了測試方法中MyBundle

public function loginCheckAction() 
    { 
     throw new \Exception('This should never be reached!); 
    } 

而錯誤

永遠不應該達到!

嘗試刪除默認控制器爲login_check

login_check: 
path: /login_check 
#defaults: { _controller: DuterteBundle:Security:loginCheck } //removed 

拋出錯誤

無法找到路徑控制器 「/安全/ login_check」。路由配置錯誤。

回答

0

變化

{{ path('security/login_check') }} 

{{ path('login_check') }} 

也是你的YAML文件是不正確的。改變它在:

Custom_security: 
    resource: "@MyBundleBundle/Resources/config/routing/security.yml" 
    prefix: /security 

而且MyBundle路由內部

login_check: 
    path: /login_check 
    defaults: { _controller: MyBundle:Security:loginCheck } 

logout: 
    path: /logout 

login_user: 
    path: /login 
    defaults: { _controller: MyBundle:Security:login } 
+0

,我認爲沒有必要手動添加控制器login_check路線,因爲symfony會自動處理it.Anyway我試圖用你的榜樣並在安全控制器裏面添加了一些loginCheckAction的方法..... public function loginCheckAction(){throw new \ Exception('This should never reach!');並且確實會拋出錯誤。 –