【问题标题】:How to properly access a scope in laravel?如何正确访问 laravel 中的范围?
【发布时间】:2020-11-27 09:11:26
【问题描述】:

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

{"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();
}

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

【问题讨论】:

  • 听起来好像没有注册别名“范围”的中间件...您是否注册了护照文档谈到的中间件? (scopesscope
  • @lagbox 谢谢先生!!你指对了。你可以回答,我会接受的。
  • np,祝你好运,享受 Laravel 的乐趣

标签: php laravel laravel-passport laravel-api


【解决方案1】:

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

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

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

Laravel 7.x Docs - Passport - Checking Scopes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 2014-01-27
    • 2018-02-10
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多