为啥 Rails 6 破坏(散列?)分配给名为“video_key”的表单的 hidden_​​field 的字符串值?

Posted

技术标签:

【中文标题】为啥 Rails 6 破坏(散列?)分配给名为“video_key”的表单的 hidden_​​field 的字符串值?【英文标题】:Why is Rails 6 corrupting (hashing?) the string value assigned to a form's hidden_field named "video_key"?为什么 Rails 6 破坏(散列?)分配给名为“video_key”的表单的 hidden_​​field 的字符串值? 【发布时间】:2021-09-07 17:39:23 【问题描述】:

为什么 Rails 6 会更改分配给表单中 hidden_​​field 的字符串的值?

我的代码:

= form_with url: send_video_create_posts_path(post: @post), method: :post do |f|
  = f.hidden_field :page_id, value: @page.id
  = f.hidden_field :video_key, value: @unique_key.to_s #### <= THIS GETS CORRUPTED ####
  = f.hidden_field :video_processor, value: @unique_key.to_s
  = f.hidden_field :video_token, value: "TOKEN", id: "field_for_token"
  = f.hidden_field :author_ip, value: request.ip
  = f.hidden_field :author_ua, value: request.user_agent

请注意(作为测试,当我发现 Rails 破坏了我分配给 video_key 字段的值时)完全相同的字符串被分配为 both 字段 :video_key 和字段:video_processor。

只有名为“video_key”的字段被 Rails 破坏了。

如下面的截图所示,在呈现的 html 表单中,“video_key”值已被 Rails 从 正确字符串值“210623-0036b7b62d76fe60f224”更改 损坏值“LXdSftL6HWGG8wY9tl6me-KJrIT-CVSw6wjvRCEDe8rEIumFERoKPg_ZPpFAPFSQuKfaQHUDJ-uUeZY2xBlAfg”

为什么 Rails 会更改此表单字段的分配值,如果由于(例如)字段名称而导致某种不受欢迎的“Rails 魔法”,有没有办法将其关闭?

至少可以说,如果分配给字段的数据不是指定的数据,则会破坏表单处理。

【问题讨论】:

【参考方案1】:

令人难以置信的是,这似乎是一个众所周知的 12 年历史的 Firefox 错误,他们从未修复过。最近在 Rails 论坛上作为问题重新提出。

解决方案似乎是以任何形式放置一个 DUMMY 字符串字段first,或者只是任何具有隐藏字段的形式,然后让 Firefox 破坏该字段而不是您的一个真实字段。

一些 Firefox 错误报告建议将“自动完成”=>“关闭”添加到所有隐藏的表单字段,这似乎也有效。

12 年前成立,关闭,大约一年前重新开放: https://bugzilla.mozilla.org/show_bug.cgi?id=520561

2020 年 5 月筹集: https://discuss.rubyonrails.org/t/form-with-first-field-value-is-overriden-with-a-token-like-string/74861/9

【讨论】:

以上是关于为啥 Rails 6 破坏(散列?)分配给名为“video_key”的表单的 hidden_​​field 的字符串值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 c++ 中分配 char 数组元素时,分配的字符被破坏?

为啥 update_attributes 会破坏我的 Rails 应用程序?

为啥切片 params 散列会对批量分配造成安全问题?

如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?

为啥我不能用 gem install rails -v 4.0.0 安装 rails?

将一个int(例如10)分配给c ++中结构中的字符串成员,为啥它编译成功?