2016-08-24 26 views
1

私は通常のWebアプリケーションであるレールにアプリケーションを作成しようとします。また、モバイルネイティブで書かれたモバイルアプリケーション用のAPIも作成しようとしています。私は、「考案」に沿って「偽造トークン認証」宝石を利用します。 Gemfileにgemを追加してバンドルを実行しました。次に私は rails g devise_token_auth:install User authを実行しました。最後に、私はルートを変更:Deviseトークンの認証がCSRFトークンの真正性を検証できない

Rails.application.routes.draw do 
    devise_for :users 

    namespace :api do 
    scope :v1 do 
     mount_devise_token_auth_for 'User', at: 'auth' 
    end 
    end 
end 

幸い定期sign_inとsign_up作業をWebアプリケーションのために、私はカール使用してAPIにリクエストを送信しようとすると、しかし:

curl -H "Content-Type: application/json" -X POST -d '{"email":"[email protected]","password":"aaaaaaaa"}' http://localhost:3000/api/v1/auth/sign_in 

を、私はメッセージを取得する「CSRFを確認することはできません

答えて

1

CSRFトークンの信頼性チェックは、Railsアプリケーションコントローラから発生しています。

# Prevent CSRF attacks by raising an exception. 
# For APIs, you may want to use :null_session instead. 
protect_from_forgery with: :exception 

あり、さまざまな方法は、あなたが状況を処理することができますが、レールガイドから、彼らsuggest adding a header

デフォルトでは、Railsはこれ、jQueryとjQueryのための控えめなスクリプトアダプタ を含みjQueryによってセキュリティトークンで行われた非GET Ajax呼び出しのたびに、X-CSRFトークンというヘッダーが追加されます。このヘッダがなければ、 GET以外のAjaxリクエストはRailsで受け付けられません。別の ライブラリーを使用してAjax呼び出しを行う場合、セキュリティー・トークン をライブラリーのAjax呼び出しのデフォルト・ヘッダーとして追加する必要があります。トークンを取得するには、アプリケーションビューで タグ を<%= csrf_meta_tags%>で印刷してください。

+0

ありがとうございました –

0

これは実際にCSRF攻撃からあなたを守るためのRailsの機能と考えられています。 Deviseはおそらく何らかの形の偽造防止を実装しているので、適切なトークンなしでGET以外のリクエストを行うことはできません(このトークンはRails自身から作成された要求に追加されますが、Curlでは追加されません)。あなたは "protect_from_forgery"のためのレールのドキュメントを見ることができます。私はリンクを含むだろうが、あなたが使っているRailsのバージョンがわからない。

関連する問題