我最近得到了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}--")
这也不起作用。有人有什么想法吗?
答案 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
您需要确保将您在蛋糕中使用的密码盐填入所有旧用户的行中。您还需要根据设计说明将密码更改为加密密码。
我觉得我可能需要为新用户添加一种加密方式来加密用户模型。或者也许我创建的自定义加密器处理这个方面。