has_secure_password,不会创建属性

时间:2017-06-06 17:40:05

标签: ruby-on-rails ruby

我正在尝试在我的Rails应用上使用has_secure_password和bcrypt(3.1.11)。

这是我在Ubuntu上的设置:

  1. 我安装了没有问题的bcrypt,并将它放在我的gem文件中
  2. 我在数据库中迁移的用户有password_digest:string
  3. 我将has_secure_password添加到我的用户模型
  4. 我没有收到任何错误,但是当我去创建用户时,它要求我提供password_digest属性,而不是passwordpassword_confirmation

    这是为什么? has_secure_password是否应该自动将用户更改为需要passwordpassword_confirmation而不是password_digest

2 个答案:

答案 0 :(得分:0)

不,你不能存储passwordpassword_confirmation,只存储password_digest。您永远不希望在数据库中存储纯文本密码。

当您创建新用户时,您可以

User.create(password: 'something', password_confirmation: 'something', ..other fields..)

然后has_secure_password负责更新数据库中的password_digest

User模型中加入一些验证也是一个很好的规则。

validates :password_confirmation, presence: true, on: :create
validates :password, confirmation: true

也不要忘记在控制器中列出白名单

def user_params
  params.require(:user).permit(:password, :password_confirmation)
end

User.create(user_params)

答案 1 :(得分:-2)

您可能需要手动更改表单和/或create模板以包含password_confirmation字段。请仔细查看has_secure_password文档吗?