首页 > 解决方案 > 为 Ajax 调用使用 Passport:Laravel

问题描述

Passport在我Laravel-5.7的基于应用程序中使用。这是我第一次Laravel使用Passport. 我能够oauth_access_token成功生成。但是,Passport在我的应用程序中集成会中断正在运行的 ajax 调用。我试图在互联网上找到解决方案,但我错过了一些观点。

每当我发出 ajax 请求时,我都会得到这个结果{"message":"Unauthenticated."}

由于该路由应该在管理面板中使用,因此它使用受保护的路由。这是我的 ajax 调用的 Javascript 代码:

jQuery(function ($) {
    startTime();
    $('button[name="controller"], button[name="generateApi"]').on('click', function () {
        var url = "";
        var button = $(this);
        var data = {api_token: "{!! $user->api_token !!}"};

        if (button.hasClass('tre')) {
            url = "{{ route('abc') }}";
        } else {
            url = "{{ route('xyz') }}";
            data.dataId = button.data('id');
        }

        var x = document.cookie;
        $.ajax({
            url: url,
            headers: {
                    "X-CSRF-TOKEN" : '{{ csrf_token() }}',
                    "Authorization": "Bearer " + "{{ Cookie::get('laravel_token') }}",
            },
            type: 'post',
            dataType: 'json',
            data: data,
        }).done(function (res) {

            if (button.hasClass('tre')) {
                $('input[name="apiKey"]').val(res.apiKey);
                return true;
            }

            $(button).toggleClass('btn-success btn-danger');
        });
    });
});

API 路由声明:

Route::post('functionCall', ['middleware' => 'auth:api', 'uses' => 'XYZ@functionCall', 'as' => 'xyz']);

请帮我理清这段代码中缺少的内容。

标签: ajaxlaravellaravel-5.6laravel-passportlaravel-5.7

解决方案


如果您使用 Javascript 使用自己的 API,则需要将中间件添加Laravel\Passport\Http\Middleware\CreateFreshApiToken::class到您的路由中。请参阅文档:https ://laravel.com/docs/5.6/passport#sumption-your-api-with-javascript 。


推荐阅读