5

我一辈子都无法显示我的 Facebook 画布应用程序。Chrome 控制台显示此错误,并且 iframe 内没有显示任何内容 - 它是空白的:

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

我正在使用Rails 4.0.0.rc1omniauth-facebook 1.4.1,遵循Railscast on Facebook Authentication作为指南。我没有使用任何 Javascript 代码,因为它是可选的,理想情况下,该应用程序只能在 Facebook 中访问。

路线.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]

session_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 错误,这让我花了我另一半的时间。更多关于这里的内容。

  # protect_from_forgery with: :exception

脸书设置

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

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

4

2 回答 2

5

在 Rails 4 中,X-FRAME-OPTIONS 在标头中设置为 SAMEORIGIN,我猜这会阻止它被加载到框架中,如本期所述。一位人士指出,这将给 Facebook 应用程序开发人员带来困难

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

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

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

更多信息在这里:

于 2013-05-15T20:00:15.427 回答
4

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

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

这是要点,复制并粘贴:

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

config.action_dispatch.default_headers = { 'X-Frame-Options' => 'SAMEORIGIN', 'X-XSS-Protection' => '1; mode=block',
'X-Content-Type-Options' => 'nosniff' }

您可以在 config/application.rb 中配置 defaultheaders。

config.action_dispatch.default_headers = { 'Header-Name' => 'Header-Value', 'X-Frame-Options' => 'DENY' }

或者您可以删除它们。

config.action_dispatch.default_headers.clear

于 2013-07-28T16:33:51.570 回答