
In early 2011 Facebook started to send all application requests as POST. Rack::Facebook::MethodFix converts POST requests back to GET when applicable. It looks for incoming POST requests. If the request contains signed_request parameter it converts request to GET as originally intended. Optionally if you pass in Facebook application secret_id it will also require the contents of signed_request to be valid.
When using Bundler add the following to your Gemfile:
gem "rack-facebook-method-fix"
Otherwise install the gem from commandline and require it in your code:
gem install rack-facebook-method-fix
require "rack-facebook-method-fix"
Then it is just matter of using the middleware.
use Rack::Facebook::MethodFix
Optionally if you want to validate contents of signed_request pass also the application secret.
use Rack::Facebook::MethodFix, :secret_id => "c561df165eacdd6e32672c9eaee10318"
You can exclude requests from being processed by adding an exclude option. To exclude all admin page requests you could do something like:
use Rack::Facebook::MethodFix, :exclude => proc { |env| env["PATH_INFO"].match(/^\/admin/) }