passport 多使用者使用不同模型,發放令牌和驗證

Z_Laravel發表於2021-10-19

簡介

passport多使用者登入,剛好自己也做了相關的操作,就記錄一下怎麼做的。不知道和你們想要的效果是不是這樣的。

1. 安裝passport

文件有教程,就不再敘述

2. config/auth 授權看守器,增加多個模組

配置檔案 config/auth.php 中授權看守器
guards 內可以設定多個 driver 為 passport 的模組
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],

        'wechat' => [
            'driver' => 'passport',
            'provider' => 'members',
        ]
    ],

3. 定義providers

這裡定義不同的 eloquent 模型
'providers' => [

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

        'members' => [
            'driver' => 'eloquent',
            'model' => App\Models\Member::class,
        ],
    ],

4. 生成指定 guard 的加密秘鑰

artisan passport:client --password --provider // 生成密碼授權
# --provider  指定 guard
# 為令牌命名 例如:wechat
What should we name the password grant client? [Laravel Password Grant Client]:
> wechat

# 回車確認

# 隨後會出現選擇 guard 的詢問欄,選擇你之前定義的看守器對應的 eloquent 模型
# 輸入對應數字即可 示例:1
Which user provider should this client use to retrieve users? [users]:
[0] users
[1] members
>1

5. 配置路由分組

修改routes下對應的路由檔案
Route::middleware('auth:api')->group(function () {
        // api端驗證的走這裡
});

Route::middleware('auth:wechat')->group(function () {
        // wechat端驗證的走這裡
});

6. 使用之前生成 client_id 和 secret 發放令牌

結語:前後臺分離或者區分app端,小程式端等,都是可以的
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章