2013-01-21 45 views

回答

2

你試過:

# app/config/security.yml 
security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha1 

你應該看看這些引用過:

+0

這也出現在我的腦海裏,但它不會工作,因爲FOSUserBundle中需要'鹽'值,我沒有它在舊代碼中。根據文檔,salt被添加到密碼中。我會嘗試將空字符串放在'salt'列(如果DB甚至允許的話),但我不認爲這是一個好的解決方案。 – Zeljko

+0

我剛剛嘗試過你說的,並在'salt'欄中放置了空字符串;我不能登錄:( – Zeljko

+1

事實上,這是不行的,不知道你可以在默認情況下禁用salting。在這種情況下,我認爲你應該創建自己的密碼編碼器。請參閱http://stackoverflow.com/a/8175657/1337344舉例說明如何做到這一點 – iamdto

2

我有同樣的問題

只是覆蓋由解釋編碼器一樣@iamdto

# app/config/security.yml 
security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: 
      id: your.custom.encoder 

你的類應該是

use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface; 

class CustomEncoder implements PasswordEncoderInterface 
{ 

    public function encodePassword($raw, $salt) { 
     //do not use salt here 
     return sha1($raw); 
    } 

    public function isPasswordValid($encoded, $raw, $salt) { 
     return $encoded === $this->encodePassword($raw, $salt); 
    } 
} 

你應該增加一列「版本」讓傳統用戶和更新在下次登錄

他們的相關信息
0
+0

對於其他任何人都會遇到這個問題的答案請注意,這裏給出的其他答案都不會將舊密碼轉換爲更好的加密方案(例如bcrypt等)。您應該爲您的應用程序使用安全的散列方法,並支持將這些較舊的登錄名作爲回退,而不是堅持使用未綁​​定的sha1。這就是上面的bundle所做的。 – calumbrodie