[解決済み】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となっています。
関連
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み] rake db:migrateを使って1ステップだけロールバックする方法
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Railsでグループとカウント
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] Rubyのクラスで未初期化の定数エラーが発生する
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] 未初期化の定数 "コントローラ名"
-
[解決済み】警告:CSRFトークンの真正性を確認できない rails