_api.php
_ファイルからルートを割り当てようとすると、_401: Unauthenticated
_-エラーが発生します。
これがルートです:
_Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
Route::post('admin/product-image-sort', 'ApiController@SaveProductImageSort')->name('api.save-product-image-sort');
});
_
Jquery Ajaxを使用してこれを呼び出しています:
_<script>
$('#sortable-image-container').sortable({
items: '> .row > *',
update: function (event, ui) {
var data = $(this).sortable('serialize');
console.log(data);
$.ajax({
data: data,
type: 'POST',
url: "{{ route('api.save-product-image-sort') }}",
success: function (data) {
if(data == "success"){
$.notify({
icon: 'pe-7s-close-circle',
message: "Sucessfully saved the Image Sorting"
},{
type: 'success',
timer: 500
});
}
}
});
}
});
</script>
_
したがって、これは_'middleware' => 'auth:api'
_部分を除外すると問題なく機能しますが、認証なしで内部APIへのアクセスを許可したくありません。
APIが行うことは、jQueryUiのSortableのシリアル化を使用して取得したIDの配列を送信することです。次に、ApiControllerはそれを調べ、特定の製品のすべての画像の並べ替えを更新しました。
Laravelドキュメントに記載されているようなCSRFトークンを、メタタグにcsrf_token()
を入れて、すべてのAjaxリクエストに添付することで含めました。
_$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
_
Chromeの[ネットワーク]タブでもわかるように、リクエストに2つのCookieが追加されます。
重要なのは、あなたが認証されていないということです。 CSRFトークンは認証トークンではありません。
APIに対してユーザーを認証し、(たとえば)ユーザーがAPIの使用を許可されていることを確認するために、リクエストごとに送信する一意の認証トークンをユーザーに与える方法が必要になります。
多分このリンクは役に立つかもしれません:
https://laracasts.com/discuss/channels/laravel/53-api-routes-auth-middleware-confusion
ドキュメントのこの部分も役立つかもしれません。 HTTP基本認証についてです。
https://laravel.com/docs/5.4/authentication#http-basic-authentication
特に「ステートレスHTTP基本認証」の部分
HomeControllerコンストラクトメソッドを見てみましょう。このような電話はありますか?
$this->middleware(['auth']);