在阅读https://symfony.com/doc/current/security/custom_provider.html#create-a-user-class/时,我见过的所有示例都为Symfony\Component\Security\Core\User\UserInterface
类实施了User
。这个接口为salt字段定义了一个方法 - 但是我想使用Bcrypt来进行散列算法。
在我的app/config/security.yml
文件中,我有:
encoders:
AppBundle\Security\User\WebserviceUser:
algorithm: bcrypt
cost: 12
链接文件说:
如果getSalt()什么都不返回,则使用您在security.yml中指定的算法对提交的密码进行简单编码。如果指定了salt,则创建以下值,然后散列...
这是否意味着如果我指定使用Bcrypt,那么我不需要在用户数据库表中使用salt字段(因为当使用哈希值时,salt与其他密码在同一个字符串中Bcrypt)?
如果是这种情况,那么我猜测我可以将getSalt()
方法留空,以便不会指定盐,并且将使用security.yml中的算法。< / p>
我的上述假设是否正确?如果不是,我如何实现用于提供密码哈希的bcrypt的用户提供程序?
我正在使用Symfony 3.1.6
答案 0 :(得分:4)
您需要使用Salt属性吗?
如果你使用bcrypt,没有。否则,是的。必须对所有密码进行哈希处理 用盐,但是bcrypt在内部完成。从本教程开始 使用bcrypt,用户中的
getSalt()
方法只需return null
(就是这样 不曾用过)。如果您使用其他算法,则需要取消注释 用户实体中的salt行,并添加一个持久的salt属性。
如果您想在return null
方法中{B}使用getSalt()
。