2016-11-17 139 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不支持的數據庫。兩者似乎都希望我的密碼與散列密碼分開。 –

相關問題