【发布时间】:2013-09-29 15:33:46
【问题描述】:
我有一个现有的 Web 应用程序,它有几千个用户,我将其移植到 Rails。在我重写和重构此应用程序时,我可能需要在任意数量的不同服务器上运行它以用于开发、测试和生产目的。
我在我的用户模型中使用 Rails 的内置 has_secure_password 方法,但我担心密码数据的可移植性。我需要将我的数据库内容从一台机器移动到另一台机器以在不同的环境中进行测试,这非常重要,我可以在每个环境中使用相同的用户和密码集来测试用户身份验证功能。
到目前为止,很容易找到有关 bcrypt-ruby 如何与 Rails has_secure_password 一起工作的答案,但经过数周的搜索,我还没有找到明确的答案。
如果 has_secure_password 导致 WorkFactor + Salt + HashedPassword 连接并保存到 password_digest 数据库列,那么 如果移动到任何其他机器(假设任何其他机器正在运行),该哈希是否可以重新生成并可靠地比较Rails 在类 Unix 操作系统上)?
OR 换句话说 - 使用 Rails 的 has_secure_password 生成的 bcrypt-ruby 密码可移植吗?
后续问题:如果盐总是随机生成(我见过相同的密码使用不同的哈希,所以我不认为盐是从密码本身的文本中创建的)那么 Rails 应用程序如何能够可靠地重新散列登录表单提交的密码并将其与数据库中的内容进行比较。显然,它必须首先知道盐是什么才能进行比较。它是怎么做到的?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 bcrypt bcrypt-ruby