Rails从CakePHP设计传统用户

时间:2012-01-15 21:09:07

标签: ruby-on-rails-3 cakephp devise authorization cakephp-1.3

我最近得到了Devise的工作。新用户登录,注册,注销等都很好。但旧用户有问题。我已经得到了一个未经授权的401,在我看来哈希在登录时错误地创建,当然不能正确匹配。

我的用户模型:

class User < ActiveRecord::Base
  require "digest/sha1"
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :encryptable, :encryptor => :old_cakephp_auth

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  has_many :events
end

Cakephp使用sha1,但我不知道它是如何做的具体细节。这显然不起作用,这就是我在这里的原因:

require "digest/sha1"

module Devise
  module Encryptors
    class OldCakephpAuth < Base
      def self.digest(password, stretches, salt, pepper)
        Digest::SHA1.hexdigest("#{salt}#{password}")
      end
    end
  end
end

我从如何添加自定义加密器示例中得到了这一点。他们有这个:

Digest::SHA1.hexdigest("--#{salt}--#{password}--")

这也不起作用。有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我在创建您自己的自定义加密器wiki时看到了这种变体。我不知道以前怎么没见过。也许有人最近更新了它。

将以下内容放入您的用户模型中。它应该覆盖设计中的有效密码:

  def valid_password?(password)
    return false if encrypted_password.blank?
    Devise.secure_compare(Digest::SHA1.hexdigest(self.password_salt+password), self.encrypted_password)
  end

您需要确保将您在蛋糕中使用的密码盐填入所有旧用户的行中。您还需要根据设计说明将密码更改为加密密码。

我觉得我可能需要为新用户添加一种加密方式来加密用户模型。或者也许我创建的自定义加密器处理这个方面。