修复Rails oauth facebook x-frame-options sameorigin错误
我不能为我的生活让我的Facebookcanvas应用程序显示。 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 , 以Facebook身份validation上的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]
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错误,这些错误让我失去了我的另一半。 在这里再说一点 。
# protect_from_forgery with: :exception
Facebook设置
- 应用领域:
myapp.dev
- Canvas URL:
http://myapp.dev
:http://myapp.dev
- 安全canvasURL: – 空白 – 如果指定了https,我的网页不可用
在我开始翻转办公桌之前请帮忙。 🙂
在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访问我的本地开发机器。 我在canvas
和Facebook中的secure canvas
字段中输入了此域。 强烈推荐。
更多信息:
我发现边缘指南的这一部分,它解释了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; 模式=块”,
‘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