laravel Passport 使用要点记录

左心房为你撑大大i 提交于 2019-12-18 20:41:02

安装

composer require laravel/passport

运行迁移

php artisan migrate

创建访问令牌

  • [个人访问] 客户端和 [密码授权] 客户端
php artisan passport:install
  • 单独创建 密码授权 客户端
php artisan passport:client --password
  • 单独创建 个人访问 客户端
php artisan passport:client --client

模型中使用

在模型中加入 HasApiTokens Trait

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

生成 Passport 生成访问令牌所需的秘钥(大白话:每生成一个令牌都要使用到它)

生成的秘钥一般情况不应放在版本控制中,默认生成的文件存放在 storage 目录下

php artisan passport:keys

令牌的有限期配置

在 AuthServiceProvider 中配置

public function boot()
{
    $this->registerPolicies();

    Passport::routes();
    // 配置 令牌 失效时间
    Passport::tokensExpireIn(now()->addDays(15));
    // 配置 刷新令牌 失效时间
    Passport::refreshTokensExpireIn(now()->addDays(30));
    // 配置 个人访问令牌 失效时间
    Passport::personalAccessTokensExpireIn(now()->addMonths(6));
}

密码授权方式获取访问令牌

http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);

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

自定义登录用户名

在对应的 用户(如 User、Admin) 模型中进行设置

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

    /**
     * 通过给定的username获取用户实例。
     *
     * @param  string  $username
     * @return \App\User
     */
    public function findForPassport($username)
    {
        return $this->where('username', $username)->first();
    }
}

demo:https://github.com/ruitaoZhang/laravel-api-demo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!