我尝试使用@Assert\MinLength
但似乎在对密码进行编码后检查它是否在每个版本中都很长时间。如何在编码之前放置约束?
在绑定注册表单后用strlen
计算符号数量时,我想不出更好的事情,但我认为这不是一个好方法。而且我也不确定即使这样也行,我不确定编码何时完成。
任何建议将不胜感激!提前谢谢!
答案 0 :(得分:1)
问题在于您将一个字段用于两个目的:以纯文本和编码形式存储密码。你需要的是一个用于各种目的的领域:
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\MinLength;
use Doctrine\ORM\Mapping\Column;
class User
{
/**
* @NotBlank
* @MinLength(6)
*
* @var string
*/
private $plainPassword;
/**
* @Column
*
* @var string
*/
private $password;
}
只有$password
字段会持久保存到数据库中,并且不会在表单中显示,因此用户无法对其进行编辑。
你还需要一个Doctrine事件监听器 - 或其他一些代码 - 检查$plainPassword
是否为空,如果不是,则编码其值并将其放入$password
。
使用security.encoder_factory
服务获取您在安全配置中设置的编码器,并使用它对密码进行编码。另外,请检查我的ElnurBlowfishPasswordEncoderBundle。
答案 1 :(得分:0)
您不应自行在密码设置器中对密码进行编码。而不是使用某些编码器(您甚至可以编写自己的编码器),并在验证表单后对密码进行编码。
以下是使用编码器的示例:
http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password