Mat*_*att 7 ruby-on-rails devise
我正在从使用简单MD5无密码密码的遗留系统迁移到Devise.虽然我可以按照Devise wiki的建议滚动我自己的加密器,但我实际上想要迁移到bcrypt密码机制.
这似乎比下载彩虹表并尝试发现所有明文密码更合理......
所以,我想知道下面的代码是否会有任何副作用,尤其是在保存期间!触发任何具有意外行为的回调:
## config/initializers/legacy.rb
require 'bcrypt'
require 'digest/md5'
module Devise
module Models
module DatabaseAuthenticatable
def valid_password?(password)
if self.legacy_password_hash
if ::Digest::MD5.hexdigest(password) == self.legacy_password_hash
## authenticated; now convert to bcrypt password
self.password = password
self.legacy_password_hash = nil
self.save!
return true
else
## so that we don't get a bcrypt invalid hash exception
return false
end
else
return ::BCrypt::Password.new(self.encrypted_password) == "#{password}#{self.class.pepper}"
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
无耻地窃取:
http://groups.google.com/group/plataformatec-devise/browse_thread/thread/9dcf87b2225bd11f?pli=1
简而言之,不要覆盖 的Devise默认身份验证。只需将此方法放入您的身份验证模型中(通常User)。
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |