Symfony FOSUserBundle无法设置编码器

时间:2016-09-28 15:53:33

标签: symfony encoding fosuserbundle

我无法为我的pwd设置编码,只有模式'plaintext'才有效。我使用FOSUser包:

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 { ... }

你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

security.yml中,将FOSUserBundle的加密设置为覆盖的Acteur实体:

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

因此,您只需在Acteur实体中声明所需的额外属性。 usernameemailpassword等常见属性已在FOSUserBundle\Model\User中声明。

创建新用户时。

  • 设置plainPassword(不加密)
  • 将salt设置为用户实体(将用于加密)
  • 填写nameemail等其他任何财产。

然后致电FOSUserBundle UserManager服务完成其余工作:

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

加密将自动处理。

注意:如果您从任何注册password左右接受FormType,则可以将plainPassword属性公开给表单。

希望这有帮助!

答案 1 :(得分: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