我有一个现有的非基于框架的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