私のRailsアプリケーションでは、AJAX経由でコントローラにJSONを渡そうとしていますが、私は401 (unauthorized)
エラーに遭遇しています。私はこれを研究し、私が間違っていたことを理解しようとしていますが、私はそれほど話せません。Rails - 401(unauthorized)error - JSONとAJAXのコントローラ
まずオフ、AJAX自体 -
$.ajax({
url: "report/submission",
type: "POST",
beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content"))},
data: {"report" : reportParameter}
});
これはReport
コントローラでsubmission
アクションにデータを渡す -
class ReportController < ApplicationController
before_action :authenticate_user!, :only => [:submission]
def submission
INSERT ENTRIES TO DB, ETC
end
end
ので、おそらく1つの複雑な要因は、私はbefore_action
を必要だということですログインしてください。
基本的なプロセスは、ユーザーがフォームを完了し、あるので、エントリはJSONに組み立てられる(reportParameter
)、その後、完了するのに成功したログインが必要ですsubmission
アクションに渡された(私は後方に見えるかもしれませんが知っているが、それこの特定のアプリに必要です)。
私のレイアウトには<%= csrf_meta_tags %>
が含まれており、application
コントローラにはprotect_from_forgery with: :null_session
が設定されています。
私はこれ以上の洞察を深めるには十分理解できないことを認めなければなりません - これはCSRFトークンに関する認可問題ですが、私はAJAXのbeforeSend
を設定するとそれに対処すると考えました。
ご指摘いただければ幸いです。
したがって、ユーザーがajaxコールを発信すると、ログインしていませんか? – Uzbekjon
はい、正しいです。呼び出しがログインする前に行われ、正常にログインすると、JSONの内容が解析されてDBに記録されます。 – skwidbreth