Как правильно получить доступ к прицелу в laravel? - PullRequest
1 голос
/ 07 августа 2020

Сейчас я использую 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();
}

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

1 Ответ

1 голос
/ 07 августа 2020

Скорее всего, вы не зарегистрировали промежуточное ПО scope.

"Passport включает два промежуточных ПО, которые могут использоваться для проверки того, что входящий запрос аутентифицирован с помощью токена, которому был предоставлен данный Для начала добавьте следующее промежуточное ПО к свойству $routeMiddleware вашего файла app/Http/Kernel.php: «

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

Laravel 7.x Документы - Паспорт - Проверка Области применения

...