คำถามเดียวที่มีคำตอบมากมาย เราขอแนะนำที่ฉันหวังว่าฉันจะได้เมื่อฉันกำลังดิ้นรนเพื่อให้มันทำงานเวลา 10:30 น. ในเวลากลางคืนในวันที่กำหนด ... FB ทำสิ่งแปลก ๆ ด้วยแอพผ้าใบและคุณได้รับคำเตือน หากคุณยังอยู่ที่นี่และคุณมีแอพ Rails ที่จะปรากฏอยู่ด้านหลัง Facebook Canvas คุณจะต้อง:
Gemfile:
gem "rack-facebook-signed-request", :git => 'git://github.com/cmer/rack-facebook-signed-request.git'
config / facebook.yml
facebook:
key: "123123123123"
secret: "123123123123123123secret12312"
config / application.rb
config.middleware.use Rack::Facebook::SignedRequest, app_id: "123123123123", secret: "123123123123123123secret12312", inject_facebook: false
config / initializers / omniauth.rb
OmniAuth.config.logger = Rails.logger
SERVICES = YAML.load(File.open("#{::Rails.root}/config/oauth.yml").read)
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, SERVICES['facebook']['key'], SERVICES['facebook']['secret'], iframe: true
end
application_controller.rb
before_filter :add_xframe
def add_xframe
headers['X-Frame-Options'] = 'GOFORIT'
end
คุณต้องใช้คอนโทรลเลอร์ในการโทรจากการตั้งค่า Canvas ของ Facebook ฉันใช้/canvas/
และทำให้เส้นทางเป็นหลักSiteController
สำหรับแอพนี้:
class SiteController < ApplicationController
def index
@user = User.new
end
def canvas
redirect_to '/auth/failure' if request.params['error'] == 'access_denied'
url = params['code'] ? "/auth/facebook?signed_request=#{params['signed_request']}&state=canvas" : "/login"
redirect_to url
end
def login
end
end
login.html.erb
<% content_for :javascript do %>
var oauth_url = 'https://www.facebook.com/dialog/oauth/';
oauth_url += '?client_id=471466299609256';
oauth_url += '&redirect_uri=' + encodeURIComponent('https://apps.facebook.com/wellbeingtracker/');
oauth_url += '&scope=email,status_update,publish_stream';
console.log(oauth_url);
top.location.href = oauth_url;
<% end %>
แหล่งที่มา
- config ที่ฉันคิดว่ามาจากตัวอย่างของ omniauth
- ไฟล์อัญมณี (ซึ่งเป็นกุญแจสำคัญ !!!) มาจาก: สไลด์โชว์สิ่งที่ฉันเรียนรู้ ...
- คำถามสแต็กนี้มีมุม Xframe ทั้งหมดดังนั้นคุณจะได้พื้นที่ว่างถ้าคุณไม่ใส่ส่วนหัวนี้ในแอปคอนโทรลเลอร์
- และ @rafmagana คนของฉันเขียนคำแนะนำ herokuซึ่งตอนนี้คุณสามารถรับรางได้ด้วยคำตอบนี้และไหล่ของยักษ์ใหญ่ที่คุณเดินไปด้วย