我有傳統的應用程序,保持密碼加密sha1()
函數,沒有鹽。如何將sha1()密碼轉換爲FOSUserBundle?
現在該網站正在轉換爲Symfony2和FOSUserBundle,我如何將它們轉移到新數據庫?
我有傳統的應用程序,保持密碼加密sha1()
函數,沒有鹽。如何將sha1()密碼轉換爲FOSUserBundle?
現在該網站正在轉換爲Symfony2和FOSUserBundle,我如何將它們轉移到新數據庫?
你試過:
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha1
你應該看看這些引用過:
我有同樣的問題
只是覆蓋由解釋編碼器一樣@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);
}
}
你應該增加一列「版本」讓傳統用戶和更新在下次登錄
他們的相關信息對於其他任何人都會遇到這個問題的答案請注意,這裏給出的其他答案都不會將舊密碼轉換爲更好的加密方案(例如bcrypt等)。您應該爲您的應用程序使用安全的散列方法,並支持將這些較舊的登錄名作爲回退,而不是堅持使用未綁定的sha1。這就是上面的bundle所做的。 – calumbrodie
這也出現在我的腦海裏,但它不會工作,因爲FOSUserBundle中需要'鹽'值,我沒有它在舊代碼中。根據文檔,salt被添加到密碼中。我會嘗試將空字符串放在'salt'列(如果DB甚至允許的話),但我不認爲這是一個好的解決方案。 – Zeljko
我剛剛嘗試過你說的,並在'salt'欄中放置了空字符串;我不能登錄:( – Zeljko
事實上,這是不行的,不知道你可以在默認情況下禁用salting。在這種情況下,我認爲你應該創建自己的密碼編碼器。請參閱http://stackoverflow.com/a/8175657/1337344舉例說明如何做到這一點 – iamdto