将现有密码哈希转换为Devise

jxp*_*777 14 ruby-on-rails devise

我正在尝试将现有的Admin模型转换为Devise.我们已经有了密码哈希,但显然不是Devise兼容的.我想要做的是接受登录表单并根据加密密码检查提供的密码.如果不正确,请使用旧哈希检查密码,如果匹配,请清空旧的password_hash字段并将Devise的密码设置为提供的密码并保存模型.

前进的最佳方式是什么?我怀疑我需要覆盖一些东西,可能是在自定义控制器中,但我不完全确定如何继续.

moe*_*fju 29

您可以让Devise使用新的crypt方案进行加密密码的"艰苦工作",如https://gist.github.com/1704632所示:

class User < ActiveRecord::Base
  alias :devise_valid_password? :valid_password?

  def valid_password?(password)
    begin
      super(password)
    rescue BCrypt::Errors::InvalidHash
      return false unless Digest::SHA1.hexdigest(password) == encrypted_password
      logger.info "User #{email} is using the old password hashing method, updating attribute."
      self.password = password
      true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)