[解決済み] Railsです。POSTリクエスト時にCSRFトークンの真偽を確認できない
質問
を作りたいのですが
POST request
をローカルの開発者に渡すと、次のようになります。
HTTParty.post('http://localhost:3000/fetch_heroku',
:body => {:type => 'product'},)
しかし、サーバーコンソールからは、次のように報告されます。
Started POST "/fetch_heroku" for 127.0.0.1 at 2016-02-03 23:33:39 +0800
ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by AdminController#fetch_heroku as */*
Parameters: {"type"=>"product"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms
これが私のコントローラとルーティングの設定です。
def fetch_heroku
if params[:type] == 'product'
flash[:alert] = 'Fetch Product From Heroku'
Heroku.get_product
end
end
post 'fetch_heroku' => 'admin#fetch_heroku'
どうすればいいんだろう?CSRFをオフにするのは確かに効果的ですが、このようなAPIを作成した時点で私のミスであるべきだと思います。
他に必要な設定はありますか?
解決方法は?
クロスサイトリクエストフォージェリ(CSRF/XSRF)とは、悪意のあるウェブページが、ブックマークレットやiframeを使用したり、ユーザーを欺くために視覚的によく似たページを作成したりして、意図しないリクエストを実行するように仕向けることをいいます。
その RailsのCSRF対策 は古典的なWebアプリのために作られたもので、リクエストがあなた自身のWebアプリから発信されたことを単純に保証します。CSRFトークンは、サーバだけが知っている秘密のように機能します。Railsはランダムなトークンを生成してセッションに保存します。Railsはランダムなトークンを生成してセッションに保存します。フォームがトークンを隠し入力で送信すると、RailsはGET以外のリクエストにセッションに保存されたものと一致するトークンが含まれているかどうかを確認します。
しかし、APIは通常、定義上、クロスサイトであり、自分のウェブアプリ以外で使われることを意図しています。つまり、CSRFの概念全体が当てはまらないのです。
その代わりに、APIキーとシークレットを使ってAPIリクエストを認証するトークンベースの戦略を使うべきだ。なぜなら、リクエストが自分のアプリからではなく、承認されたAPIクライアントから来ることを検証しているからだ。
CSRFは@dcestariさんが指摘しているように無効化することができます。
class ApiController < ActionController::Base
protect_from_forgery with: :null_session
end
更新しました。
Rails 5では、APIのみのアプリケーションを生成するために
--api
オプションを使用します。
rails new appname --api
CSRFミドルウェアやその他多くのコンポーネントが含まれていないため、superflouusとなっています。
関連
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] rails erb フォームヘルパー options_for_select :selected
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】警告:CSRFトークンの真正性を確認できない rails
-
[解決済み】Rails 4 認証トークン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] 該当するルートがない [GET] "demo/hello"
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] Rails / Haml: 投稿フォームを作成するには?
-
[解決済み] Railsはsaveでモデル内の検証をスキップしますか?
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?
-
[解決済み】警告:CSRFトークンの真正性を確認できない rails