首页 > 解决方案 > 通过AJAX数据表调用laravel API时出现401未经授权的错误

问题描述

我在 laravel 中设置了一个身份验证系统,效果很好。我创建了一个 rest api 来调用一些数据,这个 api 的路由受 auth 中间件和一个带有令牌驱动程序的 api 保护。

'admin-api' => [
            'driver' => 'token',
            'provider' => 'admins',
            'hash' => false,
        ],

我在我的管理员表中有一个名为 api_token 的文件,如果我在邮递员中调用此 api 并在授权选项卡中传递不记名令牌,它包含每个管理员的令牌,它工作正常并检索数据

但是,我试图通过 AJAX 数据表调用相同的 API,并且传递了完全相同的不记名令牌,但它一直在 Chrome 控制台中显示 401 Unauthoriszed 错误。

有人可以解释为什么令牌没有传递给 api 调用以及如何让它通过吗?

我的 api.php 文件:

Route::group(['middleware' => 'auth:admin-api'], function(){
    
    Route::get('/admins', [APIController::class, 'getAdmins'])->name('getAdmins');

});

我的 api 控制器方法从数据库中调用数据:

public function getAdmins(){  
        $query = AdminResource::collection(Admin::all());
        return datatables($query)->make(true);
    }

我的ajax代码:

<script type="text/javascript">
        $(document).ready(function() {

            // DataTable
            $('#dataTable').DataTable({
                headers: {
                    'X-Authorization': 'odhTIEX6PP4oBwC39JFpAbWF8TaZ5iL8JkB0PMd4Lg9WrbQFgqwT5k9pzPw9iWdS3jYFmNcoJrnydgaM',
                    'Authorization': 'Bearer odhTIEX6PP4oBwC39JFpAbWF8TaZ5iL8JkB0PMd4Lg9WrbQFgqwT5k9pzPw9iWdS3jYFmNcoJrnydgaM',
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
                    'Accept': 'application/json',

                },
                processing: true,
                'language': {
                    'loadingRecords': '&nbsp;',
                    'processing': '<div class="spinner-border text-primary"></div>'
                },
                serverSide: true,
                ajax: "{{ route('getAdmins') }}",

                columns: [{
                        data: 'first_name'
                    },
                    {
                        data: 'last_name'
                    },
                    {
                        data: 'email'
                    },
                    {
                        data: 'phone'
                    },
                    {
                        data: 'role'
                    },
                ]
            });

        });

    </script>

标签: javascriptajaxlaravelhttpdatatable

解决方案


推荐阅读