每当我尝试从 api.php
文件分配路由时,我都会收到 401:未经身份验证
- 错误。
这是路线:
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 的作用是发送使用 jQuery Ui 的 Sortable 序列化获得的 id 数组。然后,ApiController 会进行查找并更新特定产品的每个图像的排序。
我已经像 Laravel 文档中所述那样包含了 CSRF token ,方法是将 csrf_token()
放入元标记并将其附加到每个 Ajax 请求:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
我还可以在 Chrome 的网络选项卡中看到,它向请求添加了两个 cookie。
最佳答案
问题是您尚未经过身份验证。 CSRF token 不是身份验证 token 。
您将需要一种方法来根据 API 对用户进行身份验证,并(例如)为他们提供一个唯一的身份验证 token ,他们随每个请求发送该 token ,以确保他们被允许使用您的 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 基本身份验证”部分
关于jquery - Laravel 5.4 + Ajax 等于 401 未经身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912013/