2015-09-13 3 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 бросает исключение ошибка, я импортировал маршруты MyBundle в config/routing.yml И моя форма для регистрации выглядит так:

<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 («Этого никогда не должно было быть!»); и действительно порождает эту ошибку. –

Смежные вопросы