如何在Rails应用程序中重用Authlogic的密码加密功能?

时间:2011-06-14 20:19:47

标签: ruby-on-rails module authlogic

在我的Rails应用程序中,我会定期要求用户在一定程度的不活动后重新输入密码 - 例如在Linux上使用sudo。我的应用程序使用Authlogic进行身份验证和处理密码存储和加密。

我需要一些方法来加密用户输入的密码,使用完全相同的加密方案,Authlogic在验证密码时验证密码时使用加密密码。我需要1)加密用户输入的密码,2)在加密和用户存储在数据库中的加密密码之间进行字符串比较。

我应该在哪里放置执行此加密的方法?以下是一些想法:

创意1(在新的自定义模块中)

module PasswordCryption
  include Authlogic::ActsAsAuthentic::Password

  encrypt_password(password)

  end
end

创意2(在用户模型中)

class User
  acts_as_authentic <---- makes Authlogic password encryption functionality available

  encrypt_password(password)

  end
end

1 个答案:

答案 0 :(得分:1)

Authlogic默认使用SHA512加密。线索是authlogic重复了hexdigest功能20次。这将解决您的问题:

digest = [raw_password, password_salt].join('')
crypted_password = 20.times { digest = Digest::SHA512.hexdigest(digest) }