私のRails FBアプリでは、キャンバスで実行しているときに、「/users」に移動するとGET
、インデックスページを表示する代わりにPOST
、新しいユーザーが作成されます。
これは、URL に直接アクセスしようとした場合にのみ発生します。アプリで「ユーザーのリスト」リンクを使用すると、期待どおりに機能します。
何故ですか?
私のRails FBアプリでは、キャンバスで実行しているときに、「/users」に移動するとGET
、インデックスページを表示する代わりにPOST
、新しいユーザーが作成されます。
これは、URL に直接アクセスしようとした場合にのみ発生します。アプリで「ユーザーのリスト」リンクを使用すると、期待どおりに機能します。
何故ですか?
それがFBのやり方です。また、各クエリでデータを投稿します。
Facebook はすべてを POST として送信し、RESTful ルートにブレーキをかけます。ただし、それを修正する方法があります。着信 POST リクエストにsigned_request
パラメーターが含まれている場合、Facebook によって GET から POST に変換されたと見なすことができます。
Rack::Facebook::MethodFixミドルウェアは問題を自動的に修正します。次のようなもので使用できます。
# Basic usage
use Rack::Facebook::MethodFix
# Also validate signed_request
use Rack::Facebook::MethodFix, :secret_id => "c561df165eacdd6e32672c9eaee10318"
# Do not apply request method fix to admin urls.
use Rack::Facebook::MethodFix, :exclude => proc { |env| env["PATH_INFO"].match(/^\/admin/) }
またはRailsを使用している場合
config.middleware.use Rack::Facebook::MethodFix