1.首先经过 Composer 包管理器安装 Passport:php
composer require laravel/passport
注:若是安装过程当中提示须要更高版本的 Laravel:
laravel/passport v5.0.0 requires illuminate/http ~5.6
,能够经过指定版原本安装composer require laravel/passport ~4.0
。html
2.注册服务提供者laravel
将 Passport
的服务提供者注册到配置文件 config/app.php
的 providers
数组中web
Laravel\Passport\PassportServiceProvider::class,
Laravel 5.5以后会自动注册服务提供者数据库
3.迁移数据库api
php artisan migrate
注:若是你不想使用 Passport 的默认迁移,须要在
AppServiceProvider
的register
方法中调用Passport::ignoreMigrations
方法。你能够使用php artisan vendor:publish --tag=passport-migrations
导出默认迁移。数组
第一次部署 Passport 到生产服务器时,可能须要运行 passport:keys
命令。这个命令生成 Passport 须要的加密 keys 以便生成访问令牌,生成的 keys 将不会存放在源代码控制中:安全
php artisan passport:keys
4.建立生成安全访问令牌(token)所需的加密键服务器
须要运行 passport:install
命令,该命令将会建立生成安全访问令牌(token)所需的加密键,此外,该命令还会建立「personal access」和「password grant」客户端用于生成访问令牌:session
php artisan passport:install
生成记录存放在数据表 :oauth_clients

5.运行完这个命令后,添加 Laravel\Passport\HasApiTokens
trait 到 App\User
模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope:
<?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; }
6.接下来,你须要在 AuthServiceProvider
的 boot
方法中调用 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 { /** * The policy mappings for the application. * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }
7.最后,在配置文件 config/auth.php
中,须要设置 api
认证 guard 的 driver
选项为 passport
。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard
:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
OAuth2 密码受权容许你的其余第一方客户端,例如移动应用,使用邮箱地址/用户名+密码获取访问令牌。这使得你能够安全地颁发访问令牌给第一方客户端而没必要要求你的用户走整个 OAuth2 受权码重定向流程。
在应用能够经过密码受权颁发令牌以前,须要建立一个密码受权客户端,你能够经过使用带 --password
选项的 passport:client
命令来实现。若是你已经运行了 passport:install
命令,则没必要再运行这个命令:
php artisan passport:client --password
这里咱们使用一开始经过 passport:install
命令建立的记录做为测试记录。
建立完密码受权客户端后,能够经过发送 POST
请求到 /oauth/token
路由(带上用户邮箱地址和密码)获取访问令牌。这个路由已经经过 Passport::routes
方法注册过了,不须要手动定义。若是请求成功,就能够从服务器返回的 JSON 响应中获取 access_token
和 refresh_token
和经过受权码返回数据格式一致。
这里的username使用的是email,若是想要经过name、iphone来获取,须要在users模型中添加一下方法
// 容许passport经过这些字段找到你的用户实例 public function findForPassport($name) { $user = Users::where('name', $name) // ->orWhere('phone', $name) ->orWhere('email', $name) ->first(); return $user; }
注:记住,访问令牌默认长期有效,不过,若是须要的话你也能够配置访问令牌的最长生命周期。
友情连接: