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