Laravel5.6 Passport认证-多用户多字段解决方案

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.phpproviders 数组增加对应的模型

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'customUsers' => [
            'driver' => 'eloquent',
            'model' => App\Models\Users::class,
        ],
    ],

1–6. 在文件 app/Http/Kernel.php的$middlewareGroups中,注册自定义的PassportCustomProviderMultiAuthenticate

 '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

猜你喜欢

转载自blog.csdn.net/qq_26282869/article/details/82977075