답이 많은 유일한 질문입니다. 마감일에 밤 10시 30 분에 작동하도록하기 위해 스크램블 할 때 갖고 싶었던 가이드에 오신 것을 환영합니다 ... FB는 캔버스 앱으로 이상한 일을하고 있습니다. 잘 경고했습니다. 여전히 여기 있고 Facebook Canvas 뒤에 나타날 Rails 앱이 있다면 다음이 필요합니다.
젬 파일 :
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
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 %>
출처
- 내가 생각하는 구성은 omniauth의 예에서 나온 것입니다.
- gem 파일 (key !!!)은 다음과 같습니다 .
- 이 스택 질문에는 전체 Xframe 각도가 있으므로이 헤더를 앱 컨트롤러에 넣지 않으면 빈 공간이 생깁니다.
- 그리고 내 남자 @rafmagana는이 heroku 안내서를 썼습니다.이 안내서 는이 대답과 함께 걷는 거인의 어깨로 레일을 채택 할 수 있습니다.