【问题标题】:Rails console - TypeError: can't cast Hash to stringRails 控制台 - TypeError:无法将 Hash 转换为字符串
【发布时间】:2014-03-18 13:05:54
【问题描述】:

先有一点背景,我可以得到 - 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: can't cast Hash to string,然后是 (0.1ms) 回滚事务和大量的引用行.rb 文件

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

    您应该阅读密码散列和存储,您的密码永远不应该以明文形式存储。只是预感,试试这个:

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

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

    【讨论】:

    • 这将只存储单词“某物” - 我找到了答案,我将发布
    • 您在答案中编写的代码与此代码完全相同,只是您创建一个新用户而不是查找 id = 1 的用户
    • 哦,除了我没有设置密码确认字段。
    【解决方案2】:

    好的,在阅读另一篇有些无关的帖子时 - 这是答案:

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

    它创建了这样的东西:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2013-12-27
      • 2012-03-10
      • 2014-10-24
      • 2015-03-01
      相关资源
      最近更新 更多