如何为每个Devise Class设置加密设置?

时间:2013-12-01 19:50:49

标签: devise ruby-on-rails-3.2

您好StackOverflow社区,我正在尝试解决一个问题,即我将Devise包装在Ruby on Rails 3.2应用程序中的遗留模型中。

在这个应用程序中,我实际上有两个预先存在的设计模型:代表和管理员。这两个类使用所有标准设计配置并使用默认密码加密。我需要围绕第三个模型Dealer包装Devise,它已经有一个预先存在的自定义SHA1密码加密实现。我想在将Devise添加到此模型时保留此加密实现,而不是强迫我重置数百个用户密码。是否可以将密码加密器设置为仅用于这一个模型的SHA1,而将其他两个上述类别单独留下?

我仍在梳理文档,寻找将选项传递给devise-encryptable插件的方法,但到目前为止还没有找到我正在寻找的东西。希望社区可以帮助我进行搜索。

1 个答案:

答案 0 :(得分:1)

我最终搞清楚了。

1)将gem 'devise-encryptable'添加到Gemfile

2)添加:encryptor => :legacy_sha1选项哈希到模型。

class DeviseModel < ActiveRecord::Base
  devise :encryptable, :encryptor => :legacy_sha1
end

3)为lib / devise / encryptable / encryptors / legacy_sha1.rb添加了自定义Encryptor类

module Devise
  module Encryptable
    module Encryptors
      class LegacySha1 < Base
        def self.digest(password, stretches, salt, pepper)
          string = #secret routine!
          Digest::SHA1.hexdigest(string)
        end
      end
    end
  end
end

完美无缺。

相关问题