我正在尝试将现有的管理模型转换为Devise.我们已经有一个密码哈希,但显然不是Devise兼容的.我想做的是接受登录表单,并根据加密的密码检查提供的密码.如果不正确,请使用旧哈希来检查密码,如果匹配,请清空旧的password_hash字段,并将Devise的密码设置为提供的密码并@R_299_301@.
什么是最好的前进方式?我怀疑我需要重写某些东西,也许在一个自定义的控制器中,但是我并不完全确定如何进行.
解决方法
您可以让Devise使用新的密码方案进行加密密码的“辛勤工作”,如
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