内容简介:在开始之前,请通过 Composer 包管理器安装 Passport:Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport 的迁移命令来自动创建存储客户端和令牌的数据表:接下来,运行 passport:install 命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:
在开始之前,请通过 Composer 包管理器安装 Passport:
composer require laravel/passport 复制代码
Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport 的迁移命令来自动创建存储客户端和令牌的数据表:
php artisan migrate 复制代码
接下来,运行 passport:install 命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:
php artisan passport:install 复制代码
配置
上面命令执行后,请将 Laravel\Passport\HasApiTokens Trait 添加到 User 模型中, 这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:
Models/User.php
class User extends Authenticatable { use HasApiTokens, Notifiable; } 复制代码
在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:
Provinders/AuthServiceProvider.php
public function boot() { $this->registerPolicies(); Passport::routes(); //设置token过期时间 Passport::tokensExpireIn(now()->addDays(1)); //设置刷新token过期时间 Passport::refreshTokensExpireIn(now()->addDays(30)); } 复制代码
将配置文件 config/auth.php 中授权看守器 guards 的 api 的 driver 选项改为 passport。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的 TokenGuard 来处理:
config/auth.php
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', 'hash' => false, ], ], 复制代码
密码模式
在应用程序通过密码授权机制来发布令牌之前,在 passport:client 命令后加上 --password 参数来创建密码授权的客户端。如果你已经运行了 passport:install 命令,则不需要再运行此命令:
php artisan passport:client --password
请求令牌
创建密码授权的客户端后,就可以使用用户的电子邮件地址和密码向 /oauth/token
路由发出 POST 请求来获取访问令牌。而该路由已经由 Passport::routes 方法注册,因此不需要手动定义它。如果请求成功,会在服务端返回的 JSON 响应中收到一个 access_token 和 refresh_token:
请求参数:
'grant_type' => 'password', 'client_id' => 'client-id', //需要使用password_client=1 'client_secret' => 'client-secret', 'username' => 'taylor@laravel.com', 'password' => 'my-password', 'scope' => '', 复制代码
自定义用户名字段
当使用密码授权时,Passport 默认使用 email 作为「用户名」。但是,你可以通过在模型上定义一个 findForPassport 方法来自定义用户名字段:
Models/User.php
/** * 通过用户名找到对应的用户信息 * * @param string $username * @return \App\User */ public function findForPassport($username) { return $this->where('username', $username)->first(); } 复制代码
路由保护
通过中间件
Passport 包含一个 验证保护机制 可以验证请求中传入的访问令牌。配置 api 的看守器使用 passport 驱动程序后,只需要在需要有效访问令牌的任何路由上指定 auth:api 中间件:
Route::middleware('auth:api')->group(function () { }); 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Laravel——Passport OAuth
- Laravel Passport——OAuth2 API 认证系统源码解析(下)
- Laravel Passport——OAuth2 API 认证系统源码解析(上)
- Laravel Passport + 微信小程序完成OAuth2.0认证登录
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Programming Patterns
Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95
The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!