jquery - Laravel 5.4 + Ajax 等于 401 未经身份验证

标签 jquery ajax laravel-5 csrf http-status-code-401

每当我尝试从 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。

enter image description here

最佳答案

问题是您尚未经过身份验证。 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/

相关文章:

jquery - ASP.NET Web 服务返回 xml 而不是 json

Laravel5 : Middleware or Validation?

php - Laravel 登录 session

php - 如何在zend框架2或AjaxContext中使用ajax?

javascript - prototype 在 jQuery 源代码中是什么意思?

javascript - 如何将 HTML <canvas> 数据发送到服务器

php - 如何停止向自己发送通知?

javascript - 如何检测浏览器中是否支持箭头键的按键?

javascript - 创建自动滚动 slider

javascript - jQuery 数据表单元格不更新