2

在阅读https://symfony.com/doc/current/security/custom_provider.html#create-a-user-class/时,我看到的所有示例都实现Symfony\Component\Security\Core\User\UserInterfaceUser该类。这个接口为盐场定义了一个方法——但我想使用 Bcrypt 作为散列算法。

在我的app/config/security.yml文件中,我有:

encoders:
    AppBundle\Security\User\WebserviceUser:
        algorithm: bcrypt
        cost: 12

链接的文件说:

如果 getSalt() 什么都不返回,那么提交的密码只是使用您在 security.yml 中指定的算法进行编码。如果指定了盐,则创建以下值,然后散列...

这是否意味着如果我指定使用 Bcrypt,那么我不需要用户数据库表中的 salt 字段(因为当使用 Bcrypt 散列时,salt 与密码的其余部分位于相同的字符串中)?

如果是这种情况,那么我猜我可以只留下getSalt()一个空主体的方法,这样就不会指定盐,并且会使用 security.yml 中的算法。

我的上述假设是否正确?如果不是,我如何使用 bcrypt 来实现用户提供程序来散列密码?

我正在使用 Symfony 3.1.6

4

1 回答 1

4

创建您的第一个用户中所述:

您需要使用 Salt 属性吗?

如果您使用 bcrypt,则不会。否则,是的。所有密码都必须使用盐进行哈希处理,但 bcrypt 在内部执行此操作。由于本教程确实使用了 bcrypt,因此getSalt()User 中的方法可以return null(未使用)。如果您使用不同的算法,则需要取消注释 User 实体中的盐线并添加持久盐属性。

如果您只想return nullgetSalt()方法中使用 Bcrypt。

于 2016-11-17T23:06:46.767 回答