[ Laravel5使用Passport ]安装与配置

Song5846 次浏览1个评论2018年05月07日

一、安装

使用Composer安装Passport

composer require laravel/passport

如果是laravel 5.5版本,可以使用

composer require laravel/passport:v4.0.3

接下来,将Passport的服务提供者注册到配置文件config/app.phpproviders数组中:

Laravel\Passport\PassportServiceProvider::class,

Passport服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行Passport的迁移命令来自动创建存储客户端和令牌的数据表:

php artisan migrate

二、配置

1、应用配置

请将Laravel\Passport\HasApiTokens Trait添加到App\User模型中,这个Trait会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:

<?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;

    // 添加查询规则,在这里可以修改查询字段
    public static function findForPassport($username)
    {
        return User::where('username', $username)->first();
    }
}

接下来,在AuthServiceProviderboot方法中调用Passport::routes函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * 应用程序的策略映射。
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

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

        Passport::routes();
    }
}

最后,将配置文件config/auth.php中授权看守器guardsapidriver选项改为passport。此调整会让你的应用程序在在验证传入的API的请求时使用PassportTokenGuard来处理:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

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

2、部署 Passport

第一次将Passport部署到生产服务器时,需要运行passport:keys命令。该命令生成Passport所需要的用来产生访问令牌的加密密钥。生成的这些密钥不会保存在源码控制中,公钥和私钥保存在storage/oauth-private.key

php artisan passport:keys

3、创建用户

可以使用seed来创建用户

php artisan make:seeder UsersTableSeeder

然后进入database\seeds\UsersTableSeeder.phprun中写入如下代码:

DB::table('users')->insert([
    'name'=>'admin',
    'email'=>'1@qq.com',
    'password'=>bcrypt('Your Password')
]);

然后运行一下代码填充数据

php artisan db:seed --class=UsersTableSeeder

4、创建密码授权客户端

在应用程序通过密码授权机制来发布令牌之前,在passport:client命令后加上--password参数来创建密码授权的客户端。如果你已经运行了passport:install命令,则不需要再运行此命令:

php artisan passport:client --password

如果你想要当前的客户端只能制定用户使用,你可以在oauth_clients表的user_id中设置用户的ID即可

创建密码授权客户端

三、使用 可以使用POSTMAN或者PHP模拟请求

Route::get('/auth/password', function (\Illuminate\Http\Request $request){
    $http = new \GuzzleHttp\Client();

    $response = $http->post('http://test.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '6',
            'client_secret' => 'MT7ZSljsE8xP3SxjyB5My6khL5FZWpyunHpjCEVO',
            'username' => '1@qq.com',
            'password' => '2',
            'scope' => '',
        ],
    ]);

    return json_decode((string)$response->getBody(), true);
});

服务器返回:

{
    "token_type": "Bearer",
    "expires_in": 1296000,
    "access_token": "",
    "refresh_token": ""
}

如果信息错误,会返回如下错误

{"error":"invalid_credentials","message":"The user credentials were incorrect."}

授权后如何获取数据

授权后直接所以Auth::user();即可获取信息。

常见问题

1、如何定义获取令牌地址

可以在App\Providers\AuthServiceProvider修改:

Passport::routes(null,['prefix'=>'api/oauth']);

2、Key path "file:///private/var/www/ibm/storage/oauth-private.key" does not exist or is not readable

出现如上错误是因为没有生成密钥,需要执行如下命令:

php artisan passport:keys

更多相关好文

    当前暂无更多相关好文推荐...