0

我尝试过,@Assert\MinLength但它似乎在对密码进行编码后进行检查,因为它在任何情况下都足够长。如何在编码之前放置约束?

我想不出比strlen在绑定注册表后计算符号数量更好的方法,但我认为这不是一个好方法。而且我也不确定这是否会起作用,我不确定编码何时完成。

任何建议将不胜感激!先感谢您!

4

2 回答 2

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

于 2012-09-13T08:51:37.357 回答
0

您不应该在密码设置器中自己编码密码。取而代之的是使用一些编码器(您甚至可以编写自己的编码器),并在验证表单后对密码进行编码。

以下是如何使用编码器的示例:

http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password

于 2012-09-13T08:51:00.277 回答