ブラウザの外部からHTTPPOST
リクエストを行う必要がありますが、Rails バックエンドが認証を受け入れません (エラー 401)。そのような場合、CSRF トークンを渡す必要があることはわかっていますが、機能していません。
ブラウザーのフォームから要求を行うと、期待どおりに機能しますが、ブラウザーの外部から (たとえば、curl を使用して) 同一の要求 (ヘッダーと Cookie に関して) をシミュレートしようとすると、認証が失敗します。動作しません。
protect_from_forgery
2 つの小さな変更により、ブラウザーなしで成功することができました。(1) CSRF を検証するoff をオフにするか、(2) リクエストGET
の代わりにPOST
を使用します。どちらの場合も、Cookie を渡すだけで十分です。つまり、問題は間違いなく CSRF に関連しています。
それで、私の質問はPOST
、ブラウザを使用せずにRailsサーバーへのCSRFで保護されたHTTPを作成するにはどうすればよいですか?
明確にするために、プロセスは次の 3 つのステップに分けられます。
Login : セッションを識別するために Cookie を返します。
New :
GET
後で使用する CSRF トークンを返すリクエスト (Cookie を使用)。Create :作成
POST
したい情報を送信するリクエスト (セッション Cookie と CSRF トークンの両方を使用)。
失敗する唯一のステップは 3 番目のステップです。