2016-09-28 42 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