用护照消费自己的 API 时“未认证”?

“Unauthenticated” when consuming own API with passport?

我已经按照文档说明安装了 passport,并在“web”中间件中添加了这一行:

'web' => [
    // Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

现在,我正在尝试使用带有 ajax:

的数据表 (datatables.net) 获取一些数据

api.php

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function()
{
  Route::get('/itemsData', 'DataController@getItemsData')->name('api.getItemsData');

});

在blade中:

<script>
    $(document).ready(function() {
        $('#Table').DataTable({
            "order": [],
            "processing": true,
            "serverSide": true,
            "ajax": "{{ route('api.getItemsData') }}",
            "columns": [{
                "data": "name"
            }, {
                "data": "created_at"
            }],
        });
    });
</script>

但我收到的回复是:

{"message":"Unauthenticated."}

您需要将您在请求 header 中从 Passport 获得的 access_token 传递为

$.ajaxSetup({
    headers: {
        'Authorization': 'Bearer ' + 'your access token'
    }
});

好的,Passport 正在寻找“X-CSRF-TOKEN”,但不在请求中header,所以必须加.. 所以,对于这种情况:

 "ajax": {
     "url": "{{ route('api.getItemsData') }}",
     'beforeSend': function (request) {
             request.setRequestHeader("X-CSRF-TOKEN", '{{ csrf_token() }}');
     }
 },