2016-03-22 29 views
0

これは2つの質問の1つです。私はRailsでかなり安定していますが、reactx/reduxのnoobです。私はreact/reduxアプリケーションで認証を実装するのに苦労しています。取得:コンテンツタイプが変更されるのはなぜですか?

ビルドしたRails 4 APIがあります。それはよくテストされ、しっかりしています。私のRails APIはdevise-token-auth gemを使用しています。

fetch('http://localhost:8080/api/auth/sign_in', { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json', 'Accept': "application/vnd.myproject.v1"}, 
    body: {email: email, password: password}, 
    ... // snip response handling 
}) 

そして、まだそれは要求を送信したときに、私のAPIは401 Unauthorizedを返し、要求は失敗します。

リクエストを送信したボディがサーバーログをチェックアウトしていません。

params: {"format"=>"json", "controller"=>"devise_token_auth/sessions", "action"=>"create"} 

私のブラウザのネットワークビューの要求を見てみると、私は次のようにsign_in要求を参照してください。

accept:application/vnd.myproject.v1 
content-type:text/plain;charset=UTF-8 

私はコンテンツタイプが現在text/plainであることがわかります。 (「受け入れる」というのは小文字であることに興味があります...それについても疑問に思っています)

何か起きていることを誰かに説明することはできますか?

答えて

0

あなたはあなたのポストを要求してX-CSRF-TOKENを送信する必要があるか、あなたが検証をauthenticity_tokenスキップしたい場合は、あなたのようなものを使用することができます

verify_authenticity_tokenスキップする必要があります:あなたがしたい場合

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    skip_before_action :verify_authenticity_token, if: :json_request? 

    protected 

    def json_request? 
    request.format.json? 
    end 
end 

をヘッダーを設定するには、例jQuery Ajaxリクエストを参照してください:

   $.ajax({ 
         type: 'POST', 
         dataType: 'script', 
         beforeSend: function (xhr) { 
          xhr.setRequestHeader('X-CSRF-Token', 
           $('meta[name="csrf-token"]').attr('content')); 
         }, url: $(ui.item).closest('.sortable').data("sortable-link"), 
         success: function (data) { 
          .... 
         } 
        }); 
関連する問題