2014-02-05 1 views
4

Я хочу иметь одного пользователя с жестким кодированием и остальных пользователей, поступающих из базы данных. Когда я вхожу в систему с пользователями db, он работает, но если я вхожу в систему с пользователем с жестким кодированием, он показывает ошибку «Bad credentials». Вот часть моего security.yml файла:Symfony2 chain_provider in_memory пользователи входят в систему с «плохими учетными данными»

security: 
    encoders: 
     Valoran\DrushBundle\Entity\User: 
      algorithm: bcrypt 
      cost:  15 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

providers: 
    chain_provider: 
     chain: 
      providers: [in_memory, user_db] 
    in_memory: 
     memory: 
      users: 
       foo: { password: test } 
    user_db: 
     entity: { class: Acme\DrushBundle\Entity\User, property: userName } 
+0

в разделе «брандмауэр» - это ваш параметр 'поставщик' с параметром' providers'? – zizoujab

+0

Я установил параметр поставщика брандмауэра в «chain_provider», и когда я сейчас вхожу в систему, он показывает: «Нет кодера для учетной записи« Symfony \ Component \ Security \ Core \ User \ User ». Где я должен настроить кодировщик для это – Davit

+0

Ой, извините, я глуп, забыл включить Symfony \ Component \ Security \ Core \ User \ User: и его кодировщик. Спасибо, вы помогли мне :) – Davit

ответ

4

я столкнулся с той же проблемой, я добавляю ответ, чтобы сделать его более заметным для других. Если вы получаете

датчик не был сконфигурирован для счета "Symfony \ Component \ Security \ Основные \ User \ User" поставщик цепь

Вы должны добавить кодировщик, как это показано ниже (для пользователей базы данных и пользователей в памяти) [security.yml]

security: 
    encoders: 
     Splendonia\Bundle\UserBundle\Entity\User: 
      algorithm: sha512 
      encode-as-base64: true 
      iterations: 10 
     Symfony\Component\Security\Core\User\User: plaintext 

Использовать одного или нескольких поставщиков. Документы являются here и это выглядит следующим образом:

providers: 
     chain_provider: 
      chain: 
       providers: [in_memory, main] 
     in_memory: 
      memory: 
       users: 
        guest: { password: guest, roles: [ 'ROLE_GUEST' ] } 
     main: 
      entity: { class: Splendonia\Bundle\UserBundle\Entity\User, property: email } 

запомнить Также для изменения провайдера chain_provider на брандмауэрах, это выглядит примерно так:

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

     login: 
      pattern: ^/demo/secured/login$ 
      security: false 

     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      provider: chain_provider 
      form_login: 
       login_path: login 
       check_path: login_check 
       default_target_path: /dashboard 

      logout: 
       path: /logout 
       target:/

и что должно делать это.

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