如何在Symfony2中设置密码长度约束?

时间:2012-09-13 08:33:48

标签: php symfony

我尝试使用@Assert\MinLength但似乎在对密码进行编码后检查它是否在每个版本中都很长时间。如何在编码之前放置约束?

在绑定注册表单后用strlen计算符号数量时,我想不出更好的事情,但我认为这不是一个好方法。而且我也不确定即使这样也行,我不确定编码何时完成。

任何建议将不胜感激!提前谢谢!

2 个答案:

答案 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