Laravel5.6 Passport认证-多用户多字段解决方案
- 使用
Composer
依赖包管理器安装Passport
:
composer require laravel/passport
1-1. 进入项目文件夹,引入Laravel Passport
Laravel\Passport\PassportServiceProvider::class,
1-2. 运行passport数据库迁移
php artisan migrate
1-3. 运行 passport:install 命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端
php artisan passport:install //同时创建个人访问 和密码授权
php artisan passport:client --password /只创建密码授权
1–4. 修改默认验证字段
创建数据模型并覆盖findForPassport
方法(用于修改默认验证字段)。未使用常见的username字段。如企业用户名字段tel
<?php
namespace App\Models;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class CustomUsers extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* 修改认证时的默认username字段为tel
*/
public function findForPassport($username) {
return $this->where('tel', $username)->first();
}
}
1–5. 配置文件 config/auth.php
中 providers
数组增加对应的模型
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'customUsers' => [
'driver' => 'eloquent',
'model' => App\Models\Users::class,
],
],
1–6. 在文件 app/Http/Kernel.php
的$middlewareGroups中,注册自定义的PassportCustomProvider
和 MultiAuthenticate
'api' => [
'throttle:60,1',
'bindings',
'custom-provider',
],
'custom-provider' => [
\SMartins\PassportMultiauth\Http\Middleware\AddCustomProvider::class,
\SMartins\PassportMultiauth\Http\Middleware\MultiAuthenticate::class,
]
1–7. 在 AuthServiceProvider.php
增加 access token
对应的 passport routes
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
Route::group(['middleware' => 'api'], function () {
Passport::routes(function ($router) {
return $router->forAccessTokens();
});
});
}
}
1–8. 测试登录,在参数里面增加provider=customUsers
(使用postman测试)
路由: http://your-app.com/oauth/token 创建token
对应的参数
grant_type:password
client_id:2
client_secret:dQgkAde7SmPxdDwlenzs8bbZMBdC0w3X339slVgU
username:gems_crm
password:123456
scope:
provider:customUsers
1-9. 使用token
当调用 Passport 保护下的路由时,接入的 API 应用需要将访问令牌作为 Bearer
令牌放在请求头 Authorization
中,如下:
Authorization:Bearer+空格+token
注意:
如果出现模型上的问题,请先执行一下配置缓存
php artisan cache:clear
php artisan config:clear