Rails控制台 - TypeError:无法将Hash强制转换为字符串

时间:2014-03-18 13:05:55

标签: ruby-on-rails angularjs console sqlite3-ruby

首先是一点背景,我能够得到 - Angular/Rails project working on local

我去更改sqlite3中的用户/密码,这是我采取的步骤

rails c
a = User.find(1)
a.name = "myName"
a.password_digest = "mySurName"
a.save

很好,它有效!不是

嗯,好吧,但是Angular应用程序正在寻找类似这样的密码 - $ 2a $ 10 $ TrTjNCWr5KlwW2h9aJr45u8MwLDo2ErEFQp1 / ixc.8KW ......

进行一些挖掘后,I found a stackoverflow answer

接下来我尝试执行以下操作:

a = User.find(1)
filters = Rails.application.config.filter_parameters
f = ActionDispatch::Http::ParameterFilter.new filters
b = f.filter :password_digest => 'mySurName'
a.password_digest = b

导致此帖子的主题行中出现错误 - TypeError:无法将哈希转换为字符串,然后是(0.1ms)回滚事务和大量的行对.rb文件的引用

所以,我的最终问题是,如何使用rails控制台更新在密码字段上有过滤器的记录?

提前致谢

2 个答案:

答案 0 :(得分:0)

您应该阅读密码哈希和存储,不应将您的密码存储为纯文本。只是预感,试试这个:

a = User.find(1)
a.name = "whatever"
a.password = "something"
a.save

在设计(可能还有其他)中,为User模型定义了一个密码设置器,它自动将密码的哈希值存储在password_digest列中。

答案 1 :(得分:0)

好的,在读另一篇文章的时候有点不相关 - 这就是答案:

a = User.new(:name => "Luke", :password => "Skywalker", :password_confirmation => "Skywalker")
a.save

创造了这样的东西:

password_digest: "$2a$10$OPlc1rCZscqPkFYSp10NQeTmDRNs1iuv6D0VLAKk8sXu..."