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

时间:2013-05-15 19:27:50

标签: ruby-on-rails facebook authentication facebook-oauth

我不能为我的生活让我的Facebook画布应用程序显示。 Chrome控制台显示此错误,iframe中没有任何内容显示 - 它是空白的:

Refused to display 'http://mysite.dev/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

我正在使用 Rails 4.0.0.rc1 omniauth-facebook 1.4.1 ,以Railscast on Facebook Authentication为指导。我没有使用任何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]

sessions_controller.rb

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

application_controller.rb

我不得不对此进行评论,因为我不断收到InvalidAuthenticityToken错误,这些错误让我失去了我一天的另一半。更多关于here

  # protect_from_forgery with: :exception

Facebook设置

  • 应用领域:myapp.dev
  • 画布网址:http://myapp.dev
  • 安全画布网址: - 空白 - 如果指定了https,我网页不可用

在我开始翻转办公桌之前请帮忙。 :)

2 个答案:

答案 0 :(得分:6)

在Rails 4中,X-FRAME-OPTIONS在标题中设置为SAMEORIGIN,我猜这可以防止它被加载到一个帧中,如this issue中所述。一个人注意到the difficulty this will cause Facebook app developers

我设法通过将以下内容添加到application.rb来解决此问题:

config.action_dispatch.default_headers[:'X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"

我还使用Forward创建了一个域,允许Facebook访问我的本地开发机器。我在Facebook的canvassecure canvas字段中输入了此域名。强烈推荐。

此处有更多信息:

答案 1 :(得分:4)

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

http://edgeguides.rubyonrails.org/security.html#default-headers

以下是复制和粘贴的要点:

  

来自Rails应用程序的每个HTTP响应都会收到以下默认安全标头。

     

config.action_dispatch.default_headers = {'X-Frame-Options'=&gt;   'SAMEORIGIN','X-XSS-Protection'=&gt; “1;模式=块”,
  'X-Content-Type-Options'=&gt; 'nosniff'}

     

您可以在config / application.rb。

中配置defaultheaders      

config.action_dispatch.default_headers = {'Header-Name'=&gt;   '标题值','X-Frame-Options'=&gt; '拒绝'}

     

或者你可以删除它们。

     

config.action_dispatch.default_headers.clear