REST Laravelで構築されたAPIと通信しようとします。しかし、トークンの不一致により、POSTMANでの呼び出しは拒否されます。CSRFトークンをヘッダーに含める必要があると思います。しかし、暗号化されたトークンが必要ですか?このトークンを挿入しても、トークンの不一致があるというエラーが表示されます。
私は使用してトークンを取得します:
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
return $encrypted_token;
しかし、これは更新のたびに変わるはずですか?
フォームを使用していない場合-たとえばAPIの場合-ここにある手順に従うことができます https://Gist.github.com/ethanstenis/3cc78c1d097680ac7ef :
基本的に、以下をブレードまたはtwigヘッダーに追加します
_<meta name="csrf-token" content="{{ csrf_token() }}">
_
Postman Interceptorがインストールされていない場合はインストールし、オンにします
次に、ブラウザーでサイトにログインし(認証を受ける必要があります)、要素を検査するかソースを表示してトークンを取得します
Postmanで、必要に応じてGET/POSTなどを設定し、ヘッダーで新しいペアを作成します
_X-CSRF-TOKEN tokenvaluetobeinserted235kwgeiOIulgsk
_
APIをテストするときにCSRFトークンをオフにすることを推奨する人もいますが、実際にテストしているのはあなたではありません。
まだエラーがある場合は、Laravelがエラーメッセージでかなり明示的である傾向があるため、preview
を使用して応答を確認してください。何も戻らない場合は、_php_error.log
_(それが何と呼ばれていても)を確認してください。
ps 2018年10月-APIの登録、ログイン、ユーザートークンを処理するためにLaravel Passportを使用します-一見の価値があります!
はい、更新ごとに変更されます。あなたはそれをビューに入れて、投稿するときに「_token」の値として送信する必要がありますPOST var。
標準のPOSTを使用している場合は、これをフォームに追加するだけです。
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
AJAXを使用している場合は、_tokenの値を取得し、リクエストでそれを渡してください。
Postmanを使用する
次のようなページにGETリクエストを行います<meta name="csrf-token" content="{{ csrf_token() }}">
応答から値をコピーします。
ヘッダーフィールドをPOSTリクエストに追加します。
"X-CSRF-TOKEN: "copied_token_in_previous_get_response"
Postman環境でbaseURL
変数を使用しているときにこのエラーが発生しました。最後に/api
なしでサイトのURLを呼び出していたことがわかりました。馬鹿げているように聞こえますが、ユーザーエラーを排除するために、リクエストURLが以下に基づいていることを確認してください。
✅https://<your-site-url>/api
ない:
❌https://<your-site-url>