ruby-on-rails - 如何散列 Rails 中的安全问题?
问题描述
在我的用户数据模式中,我有
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.string "password_digest"
end
要散列密码,我们有't.string "password_digest"',但是如果我想向用户添加安全问题怎么办?是否有任何默认函数用于散列安全问题的答案?
解决方案
如果您的代码现在可以工作,那么您可能has_secure_password
在您的模型中。
默认情况下,这会password
为您的模型添加一个访问器,并将该值散列到名为password_digest
.
您可以通过将名称作为第一个参数传递给来更改列/属性名称has_secure_password
:
class User < ApplicationRecord
has_secure_password
has_secure_password(:security_question_1)
has_secure_password(:security_question_2)
...
这将自动散列user.security_question_1 = "..."
到名为security_question_1_digest
.
记住:
- 此方法专门用于存储短用户生成的密码,使用 BCrypt,这意味着它的最大长度为 72 个字符。
- 此方法还将
validates_confirmation_of
验证器添加到您的模型中。你可以通过传递来抑制它validations: false
。
推荐阅读
- c++ - 本地峰值检测器 skimage.feature.peak_local_max 的 C++ 实现或类似物是什么?
- docker-compose - Docker Compose 文件中的问题
- python - 如何在neural_tangent.stax 框架中指定输入维度?
- reactjs - NextJS:将新的查询字符串值推送到现有的 asPath 或更新现有的查询字符串
- angular - 角度和引导模式
- thymeleaf - 如何在 Thymeleaf 中的每 N 次迭代后更改 Row?
- image - 如何确保 Sphinx 文档中的图像文件在 LaTeX pdf 中“自动”复制
- javascript - 遍历有条件的对象的对象
- xcode - Xcode 在最新升级中丢失了一些模拟器
- types - Haxe:检查动态类型是否为对象