将现有密码哈希转换为 Devise
我正在尝试将现有的管理模型转换为设计。我们已经有了密码哈希,但它显然与 Devise 不兼容。我想做的是接受登录表单并根据加密密码检查提供的密码。如果不正确,请使用旧的哈希值检查密码,如果匹配,则清空旧的 password_hash 字段,并将 Devise 的密码设置为提供的密码并保存模型。
前进的最佳方式是什么?我怀疑我需要重写某些东西,也许是在自定义控制器中,但我不完全确定如何继续。
I'm trying to convert an existing Admin model to Devise. We already have a password hash but it's obviously not Devise compatible. What I would like to do is accept the login form and check the provided password against the encrypted password. If it's not correct, use the old hash to check the password and if it matches, empty the old password_hash field and set Devise's password to the provided password and save the model.
What's the best way to move forward? I suspect that I need to override something, perhaps in a custom controller, but I'm not entirely sure how to proceed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以让 Devise 完成使用新的加密方案加密密码的“艰苦工作”,如 https:// gist.github.com/1704632:
You can let Devise do the "hard work" of encrypting the password with the new crypt scheme, as shown in https://gist.github.com/1704632:
在 Devise 中使用 bcrypt 加密器,这就是我最终对遗留数据所做的事情:
在 models/user.rb
如您所见,devise 在遇到无效哈希时会抛出 InvalidHash 异常,这会导致在对旧用户进行身份验证时就可以了。
我用它来回退到用于创建原始遗留哈希的哈希算法。
虽然它不会更改密码,但如果需要,可以简单地将其添加到方法中。
Using the bcrypt encryptor in Devise, this is what I ended up doing with my legacy data:
In models/user.rb
As you can see, devise throws an InvalidHash exception when it encounters an invalid hash, which it would do when authenticating a legacy user.
I use this to fall back to the hashing-algorithm used to create the original legacy hash.
It doesn't change the password though, but that could simply be added to the method if needed.
首先,您需要将password_salt和encrypted_password复制到新的对象模型
使用这个,因为我必须将我的数据库用户导出到另一个应用程序和旧的,
应用程序正在使用 devise 1.0.x,新应用程序使用 2.1.x
First you need to copy password_salt and encrypted_password to your new object model
Using this because I have to export my database User to another application and old,
app are using devise 1.0.x and new app using 2.1.x
如果您要从 SHA512 迁移,该解决方案比 moeffju 的 SHA1 解决方案复杂一些:
请务必替换
stretches
和pepper
使用您用于加密密码的值。If you're moving from SHA512, the solution is a bit more involved than moeffju's SHA1 solution:
Be sure to replace
stretches
andpepper
with the values you used to encrypt the passwords.按照 Thomas Dippel 的说明,我制定了更新密码的要点:
https://gist.github.com/1578362
follow Thomas Dippel instructions i have made a gist that update password:
https://gist.github.com/1578362