2016-11-17 136 views
1

在阅读https://symfony.com/doc/current/security/custom_provider.html#create-a-user-class/时,我见过的所有示例都为User类实现了Symfony\Component\Security\Core\User\UserInterface。这个接口定义了一个salt字段的方法 - 但我想要使用Bcrypt作为哈希算法。使用Bcrypt的Symfony 3自定义用户提供程序

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

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

链接的文件说:

如果getSalt()返回任何内容,然后提交密码只需使用算法进行编码你在安全指定.yml。如果指定了盐,则创建以下值,然后进行哈希处理...

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

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

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

我使用的Symfony 3.1.6

回答

3

正如Creating your First User说:

你需要使用盐的财产?

如果你使用bcrypt,没有。否则,是的。所有的密码必须用salt加密 ,但bcrypt在内部完成。由于本教程确实使用bcrypt,所以getSalt()方法在用户可以只是return null(它不使用 )。如果使用不同的算法,则需要取消注释用户实体中的盐线并添加持久的盐属性。

如果您想在getSalt()方法中使用Bcrypt只需return null

+0

这真的帮了我。我正在创建一个自定义的UserProvider,并且定义了我自己的User类,因为我使用了Doctrine不支持的数据库。两者似乎都希望我的密码与散列密码分开。 –

相关问题