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

man*_*ire 5 authentication facebook ruby-on-rails 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.rc1omn​​iauth-facebook 1.4.1,以Facebook身份验证上Railscast作为指南.我没有使用任何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]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

application_controller.rb

我不得不对此发表评论,因为我不断收到InvalidAuthenticityToken错误,这些错误让我失去了我一天的另一半.在这里再说一点.

  # protect_from_forgery with: :exception
Run Code Online (Sandbox Code Playgroud)

Facebook设置

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

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

man*_*ire 6

在Rails 4中,X-FRAME-OPTIONS在标题中设置为SAMEORIGIN,我猜这可以防止它被加载到一个帧中,如本期所述.一个人注意到这将导致Facebook应用开发者的困难.

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

config.action_dispatch.default_headers[:'X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"
Run Code Online (Sandbox Code Playgroud)

我还使用Forward创建了一个域,允许Facebook访问我的本地开发机器.我在进入这个领域canvas,并secure canvas在Facebook的领域.强烈推荐.

更多信息:

  • 这实际上导致了另一个错误:加载'http://myapp.dev/'时遇到'无效'X-Frame-Options'标题:'ALLOW-FROM https://www.facebook.com'不是公认的指令.标题将被忽略.仍然试图将所有这些排序. (3认同)