基于 Laravel Passport API 的多用户多字段认证系统(一):基础框架搭建
网上关于Laravel Passport的教程不少,实际业务需求需要用到多用户多字段登录,原生的Passport包已经无法满足需求。经过查找资料和阅读源码,以下演示基于Laravel 5.5框架全新搭建一套API多用户多字段认证的系统Demo。
1. 基础框架搭建
1-1. 新建Laravel项目,我这里命名为 multiauth
composer create-project --prefer-dist laravel/laravel multiauth
1-2. 进入文件夹,引入Laravel Passport
composer require laravel/passport
1-3. 因为Laravel5.5自带了package discover, 因此无需按照文档中提及的将 Passport 的服务提供者注册到配置文件 config/app.php 的 providers。直接执行下一步即可:
php artisan migrate
1-4. 运行 passport:install 命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端,。
请记住 Client ID: 2 对应的 Client Secret ,后续测试需要使用。
php artisan passport:install
1–5. 将 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;
...
1–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
{
/**
* 应用程序的策略映射。
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
1–7. 将配置文件 config/auth.php 中授权看守器 guards 的 api 的 driver 选项改为 passport。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的 TokenGuard 来处理:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
1–8. 创建UserTableSeeder,并且导入测试数据
<?php
use Illuminate\Database\Seeder;
use App\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::query()->truncate();
User::create([
'name' => 'usera',
'email' => 'usera@gmail.com',
'password' => bcrypt('userasecret')
]);
User::create([
'name' => 'userb',
'email' => 'userb@gmail.com',
'password' => bcrypt('userbsecret'),
]);
}
}
composer dump-autoload
php artisan db:seed --class=UsersTableSeeder
1–9. 测试获取Token。记的把以下代码中的域名换成自己的测试环境域名,secret换成1–4里面 client_id=2 对应的 secret。
测试工具按自己习惯,此处使用curl。
curl --request POST \
--url http://multiauth.test/oauth/token \
--header 'accept: application/json' \
--header 'content-type: application/x-www-form-urlencoded' \
--data 'username=userb%40gmail.com&password=userbsecret&client_id=2&client_secret=记住的secret&grant_type=password&scope='
1–10. 如果以上的每一步操作都没错的话,应该可以看见以下的输出了
{“token_type”:”Bearer”,”expires_in”:31536000,”access_token”:”eyJ0e...",”refresh_token”:”def50...”}
基于 Laravel Passport API 的多用户多字段认证系统(二):多用户登录
本作品采用《CC 协议》,转载必须注明作者和本文链接