2016-09-28 85 views
-2

我無法爲我的密碼設置編碼,只有'明文'模式有效。我用的是FOSUser包:Symfony FOSUserBundle無法設置編碼器

security.yml:

security: 
    encoders: 
     GestionBundle\Entity\Acteur: plaintext 

    providers: 
     main_provider: 
      id: fos_user.user_provider.username 

    firewalls: 
     [...] 

     main: 
      pattern: ^/   
      anonymous: false  
      provider: main_provider 
      form_login: 
       login_path:   fos_user_security_login 
       check_path:   fos_user_security_check  
       default_target_path: route_accueil    
      logout: 
       path: fos_user_security_logout  
       target: /login 

config.yml

fos_user: 
    db_driver:  orm     
    firewall_name: main    
    user_class: GestionBundle\Entity\Acteur 

我的課:

abstract class Acteur extends FOS\UserBundle\Model\User { ... } 

abstract class Utilisateur extends Acteur { ... } 

class Professionnel extends Utilisateur { ... } 
class Beneficiaire extends Utilisateur { ... } 

你能幫助我。

回答

0

security.yml,爲FOSUserBundle設置加密,而不是你的覆蓋Acteur實體:

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

因此,你只申報在你Acteur實體需要額外的屬性。像username,email,password等常用屬性已在FOSUserBundle\Model\User中聲明。

創建新用戶時。

  • plainPassword(不加密)
  • 設置鹽給用戶實體(將被用於加密)
  • 填寫任何額外的屬性等nameemail

然後調用FOSUserBundleUserManager服務做剩下的事:

$user; // fill up any value like name etc with plainPassword. 
$userManager = $this->get('fos_user.user_manager'); 
$userManager->updateUser($user); 

加密將自動處理。

注意:如果您正在接受來自FormType左右的password左右,您可以將plainPassword屬性暴露給表單。

希望這會有所幫助!

0

謝謝,但密碼是不加密的數據庫:

$professionnel1 = new Professionnel(); 
[...] 
$professionnel1->setPassword("admin"); 
$userManager = $this->get('fos_user.user_manager'); 
$userManager->updateUser($professionnel1); 

security.yml:

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