1

我目前正在使用 Laravel Passport,我可以通过使用 localhost:8000/api/check以下返回 json 来验证是否保存了当前令牌:

{"id":"1c080ff73c6592b8e35630ae36f45f5042c04d9a9ed26a7fafc3793c606484b619ed8792be65a658","user_id":1,"client_id":5,"name":"Personal Access Tokens","scopes":["administrator"],...} 

但是当我尝试使用中间件范围进行管理时,localhost:8000/api/admin它会返回一个错误

Illuminate\Contracts\Container\BindingResolutionException:目标类 [范围] 不存在。在文件中


这是路线/api.php

Route::group(['middleware' => 'auth:api'], function(){
    Route::get('check', 'TeamController@check');

    Route::group(['middleware' => 'scope:administrator'], function() {
        Route::get('admin', 'TeamController@index');
    });
});

这是TeamController.php上的相应函数

public function check(Request $request) {
    return auth()->user()->token();
}

public function index(Request $request) {
    return auth()->user()->token();
}

有人知道我做错了什么吗?

4

1 回答 1

1

您很可能没有注册scope中间件。

“Passport 包含两个中间件,可用于验证传入请求是否已使用已授予给定范围的令牌进行身份验证。要开始,请将以下中间件添加到文件的$routeMiddleware属性中app/Http/Kernel.php:”

'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class,
'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,

Laravel 7.x 文档 - 护照 - 检查范围

于 2020-08-07T03:59:37.180 回答