我知道我可以使用这个编码器:
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $plainPassword);
但是什么时候应该使用它? 我可以在调用setPassword()方法之前编码密码。或者我可以在setPassword()方法中对密码进行编码。或者我可能应该创建一个自定义doctrine数据类型,它会在保存到数据库之前对密码进行编码?或者是其他东西?哪种变体更好?
答案 0 :(得分:3)
如果您不为用户使用任何捆绑包(例如FOSUserBundle),我建议您利用原则events preInsert
和{{1} }
通过这种方式,您可以集中代码并确保每次用户编写"进入数据库,您的操作将被执行。
如果preUpdate
没有$plainPassword
的值,也许你应该执行一些操作,更一般地说,我打赌你需要实现一些逻辑来避免编码密码“#39} ; s已编码
答案 1 :(得分:0)
实践是以加密形式将密码存储在DB中。然后在登录期间从用户那里获取密码,再次加密,从DB读取加密密码,比较两者;通过/失败取决于匹配/不匹配。