【问题标题】:where to store password besides database除了数据库,在哪里存储密码
【发布时间】:2011-02-27 20:01:50
【问题描述】:

我正在尝试构建一个超级简单的身份验证。我不确定在哪里存储管理员密码。我应该把密码放在哪里?模型,环境或其他地方。?如果我将环境变量存储在环境中,我该如何访问它。谢谢!

更新:

我在 environment.rb 中放了一些东西

ADMIN_PASSWORD = "blablabla"

并尝试进行身份验证

def authenticate(username, password)
password = Digest::MD5.hexdigest(password).to_s
 if username == "admin" && password == ENV["ADMIN_PASSWORD"]
  session[:login] = true
 end
end

不工作...

我认为不需要 to_s。谢谢大家。

【问题讨论】:

  • 写在一张纸上,然后藏在保险箱里。

标签: ruby-on-rails authentication passwords


【解决方案1】:

您可以使用环境变量,但您应该使用散列仅将其设置为加密。试试:

password = "abdefghij"
ENV['PASSWORD_SALT'] = BCrypt::Engine.generate_salt
ENV['PASSWORD_HASH'] = BCrypt::Engine.hash_secret(password, ENV['PASSWORD_SALT'])


def authenticate?(password)
  ENV['PASSWORD_HASH'] == BCrypt::Engine.hash_secret(password, ENV['PASSWORD_SALT'])
end

authenticate?("123456789") # false
authenticate?("abdefghij") # true

【讨论】:

  • 我很困惑。你能提供更多细节吗?在这个例子中我的密码是什么?
  • 您将首先使用前两行设置您的 ENV 密码,然后可以使用提供的方法测试密码是否正确。
【解决方案2】:

如果数据库不是一个选项,我更喜欢存储在环境变量中。

你可以像这样访问它们

ENV["DB_PASSWORD"] # => "something_random"

【讨论】:

  • 最好有一个 config/admin.yml,其中可以包含有效密码哈希列表和您可能想要的任何其他信息(例如每个密码的权限)
【解决方案3】:

真正简单的是将它放在一个文件中,但不要忘记对其进行加密。

【讨论】:

    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 2019-03-10
      • 1970-01-01
      • 2011-08-02
      • 2021-07-15
      • 2013-10-22
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多