Ruby on rails 修复Rails oauth facebook x-frame-options sameorigin错误

Ruby on rails 修复Rails oauth facebook x-frame-options sameorigin错误,ruby-on-rails,facebook,authentication,facebook-oauth,Ruby On Rails,Facebook,Authentication,Facebook Oauth,我一辈子都无法让我的Facebook画布应用程序显示出来。Chrome控制台显示此错误,但iframe内部未显示任何内容-为空: 拒绝显示'http://mysite.dev/'在帧中,因为它将'X-frame-Options'设置为'SAMEORIGIN'。 我正在使用Rails 4.0.0.rc1和omniauth facebook 1.4.1,以下是作为指南。我没有使用任何Javascript代码,因为它是可选的,理想情况下,应用程序只能在Facebook中访问 routes.rb m

我一辈子都无法让我的Facebook画布应用程序显示出来。Chrome控制台显示此错误,但iframe内部未显示任何内容-为空:

拒绝显示'http://mysite.dev/'在帧中,因为它将'X-frame-Options'设置为'SAMEORIGIN'。

我正在使用Rails 4.0.0.rc1和omniauth facebook 1.4.1,以下是作为指南。我没有使用任何Javascript代码,因为它是可选的,理想情况下,应用程序只能在Facebook中访问

routes.rb

  match 'auth/:provider/callback', to: 'sessions#create', via: [:get, :post]
  match 'auth/failure', to: redirect('/'), via: [:get, :post]
  match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
class SessionsController < ApplicationController

  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url
  end
会话\u controller.rb

  match 'auth/:provider/callback', to: 'sessions#create', via: [:get, :post]
  match 'auth/failure', to: redirect('/'), via: [:get, :post]
  match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
class SessionsController < ApplicationController

  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url
  end
Facebook设置

  • 应用程序域:
    myapp.dev
  • 画布URL:
    http://myapp.dev
  • 安全画布URL:--空白--如果指定了https,则“我得到”网页不可用

在我开始翻转桌子之前,请帮忙。:)

在Rails 4中,X-FRAME-OPTIONS在标题中设置为SAMEORIGIN,我猜这会阻止它加载到帧中,如中所述。一个人注意到

我通过将以下内容添加到
application.rb
,成功地解决了这个问题:

config.action_dispatch.default_headers[:'X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"
我还曾经创建一个域名,允许Facebook访问我的本地开发机器。我在Facebook的
canvas
secure canvas
字段中输入了这个域。强烈推荐

更多信息请点击此处:


我发现边缘指南的这一部分很有用,它解释了Rails 4的默认标题:

这里是复制粘贴的要点:

来自Rails应用程序的每个HTTP响应都会收到以下默认安全头。 config.action\u dispatch.default\u头文件={'X-Frame-Options'=> “SAMEORIGIN”,“X-XSS-Protection'=>“1;mode=block',
'X-Content-Type-Options'=>'nosniff'}

您可以在config/application.rb中配置defaultheaders。 config.action\u dispatch.default\u headers={'Header Name'=> '标题值','X-Frame-Options'=>'拒绝'}

或者你可以移除它们。 config.action\u dispatch.default\u headers.clear


这实际上导致了另一个错误:
加载时遇到无效的“X-Frame-Options”标题'http://myapp.dev/“:”允许从https://www.facebook.com'不是公认的指令。标题将被忽略。
仍在尝试对所有这些内容进行排序。您是否找到了上述注释的解决方案?这确实有效。关键是忽略标题,否则页面为空。最终,我用它让我的应用程序正常工作,我会向任何在当地开发的重视其理智的人推荐。这一直到今天都有效。现在标题是“SAMEORIGIN,ALLOW-FROM”。呃..在进行此更改时,我还得到一个错误,即现在有多个标题:SAMEORIGIN,ALLOW-FROM。下面的答案是:“config.action\u dispatch.default\u headers.clear”修复了这个问题,不过我希望有更好的方法,而不必完全清除它们