Satu-satunya pertanyaan yang memiliki banyak jawaban. SELAMAT DATANG di panduan ini saya berharap saya punya ketika saya berjuang untuk ini untuk membuatnya bekerja pada 10:30 malam pada hari batas waktu ... FB melakukan beberapa hal aneh dengan aplikasi kanvas, dan baik, Anda telah diperingatkan. Jika Anda masih di sini dan Anda memiliki aplikasi Rails yang akan muncul di balik Facebook Canvas, maka Anda perlu:
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
Anda memerlukan pengontrol untuk menelepon dari pengaturan kanvas Facebook, saya menggunakan /canvas/
dan membuat rute menjadi utama SiteController
untuk aplikasi ini:
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 %>
Sumber
- Konfigurasi yang saya pikir berasal dari contoh omniauth.
- File permata (yang merupakan kunci !!!) berasal dari: slideshare hal yang saya pelajari ...
- Pertanyaan tumpukan ini memiliki seluruh sudut Xframe, jadi Anda akan mendapatkan ruang kosong, jika Anda tidak meletakkan header ini di pengontrol aplikasi.
- Dan teman saya @rafmagana menulis panduan heroku ini , yang sekarang bisa Anda adopsi untuk rel dengan jawaban ini dan bahu raksasa di mana Anda berjalan.