对于我的小型 Rails 应用程序,我使用 bcrypt 在存储用户密码时对其进行哈希处理。但是,在加载新用户表单时,我的密码被“无效哈希”击中,因为我的新操作是
def new
@user = User.new
end
它不会生成新密码,因此无效。为了解决这个问题,我尝试使用
<%= form_for :user, url: users_path do |f| %>
它不需要用户对象,允许我在创建操作中进行。但是,错误处理仍然需要 User 对象并抛出nil
错误
我觉得应该有一个“正确”的方式来做到这一点。任何人都可以启发我吗?
我的用户模型是这样的:
require 'bcrypt'
class User < ActiveRecord::Base
# For user of user.password_hash. Thanks, bcrypt!
include BCrypt
before_save { self.email = email.downcase }
# Validates uniqueness of email
validates_uniqueness_of :email
# Set relationship to lists
has_many :lists
def make_new_password
new_password = Array.new(10).map { (65 + rand(58)).chr }.join
self.password_hash = Password.create(new_password)
end
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
end