我有一個現有的非基於框架的PHP/MySQL網站。它有一個簡單的安全模型,帶有用戶名和散列(MD5)密碼的用戶表。將現有用戶和密碼遷移到新的Symfony/sfDoctrineGuard用戶系統
我目前正在研究本網站的「版本2」,這次使用Symfony和Doctrine。新版本工作正常,我使用sfDoctrineGuard插件進行用戶管理。
我想將現有用戶遷移到新的應用程序中,儘量不要大驚小怪,保留現有的用戶名和密碼。我的主要問題是,我想改變我使用的密碼哈希值。
當前站點使用無碼MD5哈希密碼*。我已經想出瞭如何在保持現有算法的同時將用戶遷移到Symfony/sfDoctrineGuard(通過爲未加化的MD5提供我自己的「算法」功能)。但是,未加化的md5顯然並不理想。
所以 - 我的問題是,由於我可以用我自定義的plain-MD5密碼散列算法成功遷移到sfDoctrineGuard用戶羣中,有什麼辦法可以轉換這些用戶,以便他們使用標準,醃製SHA1 sfDoctrineGuard算法?
我想我只能在每個用戶登錄時爲每個用戶執行此操作,因爲這是我唯一擁有用戶重新哈希密碼的明文密碼。我想我需要做的就是在「這個用戶剛剛用這個密碼成功登錄」的時候掛鉤了一些東西,這樣我就可以將用戶的算法,鹽和密碼設置到新的SHA1系統中,並將用戶保存回數據庫沒有他們甚至知道它。
我挖了一下,我找不到一種方法來覆蓋或掛鉤到sfDoctrineGuard(特別是sfGuardSecurityUser,我認爲?)登錄系統在正確的位置。那麼,不是沒有黑客入侵實際的插件文件,這似乎是邪惡的。
任何Symfony/sfDoctrineGuard專家都指出我在正確的方向嗎?
*不要看着我那樣,這是我的第一個網站!至少我沒有將它們存儲成明文...
啊!這可能只是我需要的線索。我已經嘗試在我的myUser類中實現自己的checkPassword版本,但它從來沒有被調用(奇怪的是,它看起來像sfGuardSecurityUser的checkPassword()永遠不會被調用,這使它成爲一個紅鯡魚!)但進一步跟蹤事情,它實際上是進行檢查的PluginsfGuardUser,現在我知道在你提到的目錄中有一個可覆蓋的版本 - 我沒有發現 - 我應該能夠將我的代碼放在那裏。謝謝! – 2011-02-09 20:02:12