Как правильно получить доступ к области видимости в laravel?

В настоящее время я использую 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: целевой класс [область] не существует. в файле


Вот routes/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();
}

Кто-нибудь знает, что я пошел не так?


person Juan Cervantes    schedule 07.08.2020    source источник
comment
похоже, что не было промежуточного программного обеспечения с зарегистрированным псевдонимом «область» ... вы зарегистрировали промежуточное программное обеспечение, о котором говорится в паспортных документах? (scopes и scope)   -  person lagbox    schedule 07.08.2020
comment
@lagbox спасибо, сэр!! ты правильно указал. Вы можете ответить на него, и я приму.   -  person Juan Cervantes    schedule 07.08.2020
comment
np, удачи и получайте удовольствие от Laravel   -  person lagbox    schedule 07.08.2020


Ответы (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 — Паспорт — Проверка областей

person lagbox    schedule 07.08.2020