为啥 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 应用程序?
如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?