Rails身份验证与自定义字段

时间:2010-11-20 09:03:08

标签: ruby-on-rails

我有一个rails应用程序,我需要添加身份验证。问题是我有一个带有自定义用户和密码字段的遗留数据库(t_user和t_pass)。另外,t_pass未加密。

我正在寻找的是http_basic,但我可以使用current_user等方法,并且可能有更好的用户界面。我不需要验证,密码重置,任何东西。只是一种验证我的方式的方法。我使用restful_authentication但我在rails 3上。我看到一个可以使用rails 3的fork,但我想知道是否有更好的方法来处理这种情况?

3 个答案:

答案 0 :(得分:1)

在我看来,你可以使用Devise和一些额外的游戏来做你需要的事情。具体来说,您需要:

  • 确保使用旧版身份验证表创建用户模型表。
  • 覆盖此模型上的valid_password?以检查您的t_pass字段。
  • 覆盖self.find_for_database_authentication以根据t_user字段找到您的模型。

如果您想支持注册,您可能还需要编写新的加密策略。

只是提醒一句:以纯文本格式存储密码是非常不良做法。如果您有任何选择,我会认真考虑将现有用户迁移到Devise的标准结构中,并使用加密密码。

答案 1 :(得分:0)

如果您正在寻找可供使用的替代宝石,那么您可以尝试Devise。您可以扩展/更改默认设置以达到您想要的效果。

答案 2 :(得分:0)

Devise和Authlogic是两个潜在的选择。不能评论Devise我害怕因为我从未使用过它。现在似乎很受欢迎。

以下内容将帮助您开始使用Authlogic:

class User < ActiveRecord::Base
  acts_as_authentic do |config|
    config.login_field = :t_user
    config.crypted_password_field = :t_pass
    config.crypto_provider = YourCryptoProvider
  end
  ...
end

有关于获取authlogic的基础知识的转播。

这很困难的部分是您需要按照http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/CryptoProviders所述创建自己的加密提供程序类,因为authlogic不提供纯文本密码检查方法。

如上所述,如果您可以选择将密码迁移到加密版本,那么它将阻止您与auth框架作斗争。