在 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 路由?
将您的 AppServiceProvider
从 AuthServiceProvider
扩展:
class AppServiceProvider extends \Illuminate\Foundation\Support\Providers\AuthServiceProvider
或更好地创建新的服务提供商,扩展 AuthServiceProvider
,因为 AppServiceProvider
是非常全面的提供商。
我正在使用 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 路由?
将您的 AppServiceProvider
从 AuthServiceProvider
扩展:
class AppServiceProvider extends \Illuminate\Foundation\Support\Providers\AuthServiceProvider
或更好地创建新的服务提供商,扩展 AuthServiceProvider
,因为 AppServiceProvider
是非常全面的提供商。