辛纳屈在 Facebook iframe 中的应用

4
我可以帮助您翻译以下内容,这是关于编程的。在 https://blooming-wind-8528.herokuapp.com/ 上运行着一个页面,使用以下代码:
App.rb 包含:
require 'rubygems'
require 'sinatra'
require 'open-uri'
require 'json'

#show page
get "/" do
  profile = open("https://graph.facebook.com/me?access_token=#full_access_code_here_removed_for_stackoverflow#").read
  profile = JSON.parse(profile)
  @language = profile['locale'][0..1]

  erb :nofan
end

#redirect for facebook
post "/" do
  redirect "/"
end

views/nofan.erb 包含:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Stestie</title>
    <meta property="og:title" content="No Fan"/>
    <meta property="og:type" content="website"/>
    <meta property="og:url" content="https://blooming-wind-8528.herokuapp.com/"/>
    <meta property="og:image" content="https://blooming-wind-8528.herokuapp.com/images/marker_s.png"/>
    <meta property="og:site_name" content="NO fan"/>
    <meta property="fb:app_id" content="293597294002599" />
    </head>

  <body>
        <p>App running in language: <%= @language %></p>
    </body>
</html>

现在,奇怪的事情发生了:在浏览器中它完美地加载。然而,在Facebook上它不起作用。我得到一个空白屏幕。 然而,当我调用错误代码(例如:将访问令牌更改为错误的内容),我会在iframe内获得一个完整的sinatra错误页面... 有人知道我做错了什么吗? 谢谢!

5
看起来你需要禁用X-Frame-Options头,可以参考这个问题:https://dev59.com/smsz5IYBdhLWcg3whIM8,并尝试使用我在那里提供的解决方案。 - matt
1个回答

13

Sinatra尝试避免点击劫持攻击。

添加这行代码:

set :protection, :except => :frame_options

或者这一行:

disable :protection

到您的应用程序。


太棒了!这是我的第一个Sinatra应用程序,找不到任何地方!非常感谢!! - Maurice Kroon
1
是的,我可能需要改进这个文档。 - Konstantin Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接