0

これは一種の 2 つの質問を 1 つにまとめたものです。私は Rails ではかなりしっかりしていますが、react/redux の初心者であり、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 は a を返し、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

content-type が になっていることがわかりますtext/plain。(「accept」が小文字なのが面白い…それも気になります。)

誰かが私に何が起こっているのか説明できますか?

4

1 に答える 1

0

投稿リクエストで X-CSRF-TOKEN を送信する必要があるか、verify_authenticity_token をスキップする必要があります

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) {
                            ....
                        }
                    });
于 2016-03-22T10:33:36.943 に答える