La seule question qui a un tas de réponses. Bienvenue dans le guide que j'aurais aimé avoir quand je me battais pour que cela fonctionne à 10h30 le soir le jour limite ... FB fait des choses étranges avec des applications de toile, et bien, vous avez été prévenu. Si vous êtes toujours là et que vous avez une application Rails qui apparaîtra derrière un canevas Facebook, vous aurez besoin de:
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
Vous avez besoin d'un contrôleur pour appeler à partir des paramètres de toile de Facebook, j'ai utilisé /canvas/
et fait que l'itinéraire devienne le principal SiteController
pour cette application:
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 %>
Sources
- Je pense que la configuration vient de l'exemple d'Omniauth.
- Le fichier gem (qui est la clé !!!) est venu de: SlideShare choses que j'ai apprises ...
- Cette question de pile avait tout l'angle Xframe, donc vous obtiendrez un espace vide, si vous ne placez pas cet en-tête dans le contrôleur d'application.
- Et mon homme @rafmagana a écrit ce guide heroku , que vous pouvez maintenant adopter pour les rails avec cette réponse et les épaules des géants dans lesquels vous marchez.