【问题标题】:Why is my Rails app redirecting to `data:,`?为什么我的 Rails 应用程序重定向到`data:,`?
【发布时间】:2013-12-11 21:30:06
【问题描述】:

因此,当我在 Rails 4 应用程序中保存记录时,就会发生这种情况。以下是一些细节:

  • 我正在使用Ace editor
  • data 属性在我的模型或应用程序中不存在。
  • 表单是标准的form_for(非远程)。
  • 记录确实保存成功,但随后重定向到这个奇怪的 URL。

更新的代码是标准的脚手架样板。

# PATCH/PUT /pages/1
# PATCH/PUT /pages/1.json
def update
  respond_to do |format|
    if @page.update(page_params)
      format.html { redirect_to @page, notice: 'Page was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: 'edit' }
      format.json { render json: @page.errors, status: :unprocessable_entity }
    end
  end
end

有人有什么想法吗?可能是一些简单的事情,但我一生都无法弄清楚这一点。如果有其他相关信息可以分享,请告诉我。

【问题讨论】:

  • 我忘了...我录制了它的快速广播,可以看到here
  • 您如何设置@page 变量?莫非不是Page类,会导致第一个redirect_to不知道去哪里?
  • @page = Page.find(params[:id]) 你不会错过 var 声明吗?
  • @Marc-AlexandreBérubé :: 实例变量由 before_action 过滤器设置 ala: before_action :set_page, only: [:show, :edit, :update, :destroy]

标签: ruby-on-rails ruby-on-rails-4 ace-editor


【解决方案1】:

在您的特定情况下(在您的快速广播中显示的情况),Chrome 认为这是一种安全风险,因为您提交了一个包含 javascript 的 <script> 元素,该元素被插入到页面的可呈现内容中使用 [Rails 的内置] 异步 javascript。

为避免这种情况,您可以:

  1. 在提交表单之前使用客户端逻辑去除包装<script> 标签,然后在保存记录之前将它们重新添加到服务器上。
  2. 禁用 Rails 在此控制器中更新操作的内置 ajaxification,以便它通过普通的旧 HTML 提交
  3. 在表单提交和查看显示操作之间添加一个中间重定向页面

【讨论】:

    【解决方案2】:

    我相信这是因为您的@page show 视图正在呈现转义的HTML 和Javascript。 Chrome 可能具有启发式方法来分析页面并确定它是什么类型的文档。由于它可能不是以<html> 开头的,因此Chrome 假定它是一个具有data: 协议的数据文件。尝试渲染成字符串并在控制台打印结果:

    http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

    puts render_to_string @page
    

    请参阅第 4.1.1 节http://guides.rubyonrails.org/security.html#redirection

    data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K
    

    请使用显示视图模板、显示操作和来自render_to_string 的日志更新您的答案。

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多