Ruby on rails 如何在rails中创建新用户时修改输入参数(然后保存)?
我认为这是一个简单的问题。到目前为止我已经跑了Ruby on rails 如何在rails中创建新用户时修改输入参数(然后保存)?,ruby-on-rails,ruby,sqlite,scaffolding,Ruby On Rails,Ruby,Sqlite,Scaffolding,我认为这是一个简单的问题。到目前为止我已经跑了 rails生成脚手架用户用户名:string电子邮件:string密码:string 为用户模型创建新的脚手架。以下是我的user.rb: class User < ActiveRecord::Base validates :username, presence: true, length: { in: 2..50 }, uniqueness: true VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-
rails生成脚手架用户用户名:string电子邮件:string密码:string
为用户模型创建新的脚手架。以下是我的user.rb
:
class User < ActiveRecord::Base
validates :username, presence: true, length: { in: 2..50 }, uniqueness: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: true
validates :password, presence: true, length: { in: 4..50}
#self.password = 'abcd' #I can't even change the parameter to something hard-coded!
end
class用户
我写了一些测试,效果很好。我的下一步是将password
参数通过hashfunction(出于教育目的,我想自己编写该函数),并保存这个新修改的字符串,而不是原始字符串。我好像不明白怎么做?我是否在user.rb
中创建一个方法,该方法从create
方法下的users\u controllers.rb
调用
我想通过做
rails控制台--sandbox
并编写一些测试来测试这一点 您可以使用“保存前”回调
# user.rb model
before_save :hash_password
def hash_password
self.password = some_hash_function(self.password)
end
使用此方法时必须小心,不要多次散列密码。也就是说,您必须始终哈希清除密码,而不是哈希版本。这就是为什么我会这样做,并调用字段password_digest,仅在设置password属性时对密码进行散列
# user.rb model
attr_accessor :password
before_save :hash_password
def hash_password
self.password_digest = some_hash_function(self.password) unless self.password.blank?
end
那么,我的用户表是否会有一个名为
密码
或密码摘要
的列?当我在控制台中玩的时候,我应该做User.new(…,password:“pass”)
还是User.new(…,password:“pass”)
?谢谢。您的表将只包含密码摘要,但模型也将包含密码。因此,当用户在表单中填写密码文本字段时,您可以将password属性设置为该值,然后对该值执行哈希魔法。这就是我的想法,但如何防止用户传递密码摘要
?使用强参数,您只需在其中不包含密码摘要
。