在 Laravel 中找不到用于 Passport 的 AppServiceProvider 中的 $this->registerPolicies 方法

$this->registerPolicies method in AppServiceProvider not found for Passport in Laravel

我正在使用 Laravel 开发 REST api。我现在要做的是安装 Passport。我正在使用 Laravel 5.4 版本,因为我正在维护遗留系统。我按照这个官方文档集成了 Passport - https://laravel.com/docs/5.4/passport。但是我收到一个错误。

首先我安装了 Passport 运行使用这个 composer 命令

composer require laravel/passport:~4.0

然后我将此提供程序 class 添加到 config/app.php 文件

Laravel\Passport\PassportServiceProvider::class,

然后我运行这些命令

php artisan migrate
php artisan passport:install

很好,因为它给了我预期的输出。

然后我修改了app\Userclass。这是 User.php

<?php

namespace App;


use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

然后我修改了 config/auth.php 的守卫部分如下。

 'guards' => [
      'web' => [
         //'driver' => 'session',
         'driver' => 'aws-cognito',
         'provider' => 'users',
      ],

      'api' => [
         'driver' => 'passport', //'token',
         'provider' => 'users',
      ],
   ],

然后我修改了AppServiceProvider。这是我的 AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;
use Schema;
use Laravel\Passport\Passport;

class AppServiceProvider extends ServiceProvider
{
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();

    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        require_once __DIR__ . '/../Helpers/CommonHelper.php';
    }
}

这一行给我错误

$this->registerPolicies();

没有找到说的方法。如果我注释掉那一行应用程序是 运行ning。但我不应该注释掉那一行,因为现在我想保护我的 API.

例如,我在 routes/api.php

中有一条 API 路线
Route::get('event/list', 'Api\EventController@getEventList');

但我想用护照保护它。现在,我可以直接从浏览器访问 API 端点我的代码中缺少什么来使用 Passport 验证 API 路由?

将您的 AppServiceProviderAuthServiceProvider 扩展:

class AppServiceProvider extends \Illuminate\Foundation\Support\Providers\AuthServiceProvider 

或更好地创建新的服务提供商,扩展 AuthServiceProvider,因为 AppServiceProvider 是非常全面的提供商。