8

Rails3 で構築された Web サイトがあり、モバイル クライアント アクセス用の json API を実装したいと考えています。ただし、protect_from_forgery フィルターが原因で、クライアントから json ポスト リクエストを送信します。クライアントはサーバーからデータを取得しないため、クライアントが auth_token を受け取る方法がないため、json リクエストに対してのみ protect_from_forgery オプションをオフにしたいと思います (rails3 はデフォルトでこれを行うと思っていましたが、明らかにそうではありません)。 .

hereで同様のトピックが議論されていることは知っていますが、その場合、彼は投稿リクエストを送信する前に auth_token を受け取ります。

だから私の質問は、json に対してのみ protect_from_forgery をオフにすることです。これはこれを行う良い方法ですか? はいの場合、どうすればよいですか?いいえの場合、代替手段は何ですか?

参考までに、次の ajax リクエストを使用します

$.ajax({
             type: 'POST',  
             url: "http://www.example.com/login.json",  
             data: { 'email': emailVal, 'password': passwordVal },  
             success: onSuccess,  
             error: onError,  
             dataType: "json"  
});

ActionController::InvalidAuthenticityToken エラーが発生します。

ちなみに、次のcurlコマンドは機能しますが...

curl -H "Content-Type: application/json" -c cookies.txt -d '{"email": emailVal, "password": passwordVal}' -X POST http://www.example.com/login.json -i
4

3 に答える 3

17

json リクエストの場合は、認証トークン チェックをスキップできます。

class ApplicationController < ActionController::Base
  skip_before_filter :verify_authenticity_token, if: :json_request?

  def json_request?
    request.format.json?
  end
end
于 2014-03-28T14:08:39.640 に答える