passport 多用户使用不同模型,发放令牌和验证

简介

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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

这个看了更新文档后也才知道这个功能,也都使用上了。文档太低调了

2年前 评论
kkokk (楼主) 2年前

请问如果这样的话,策略和门怎么去使用?策略和门似乎只支持单用户模型,在同一个数据模型中。

2年前 评论
kkokk (楼主) 2年前

@Z_Laravel 大佬,请教下,您的token过期校验和刷新是怎么处理的呀?

1年前 评论
kkokk (楼主) 1年前
carveybunt (作者) 1年前
kkokk (楼主) 1年前

修改状态码,用异常处理会不会更方便一点?不过也不知道异常处理要捕获那个exception。毕竟passport返回的信息都是英文也不只支持local。 中间件我只想用来做token刷新机制。

1年前 评论
kkokk (楼主) 1年前

这种情况下 createToken('name')->accessToken; 不适用,因为createToken 只能用配置好的PASSPORT_PERSONAL_ACCESS_CLIENT。

1年前 评论

laravel 5.8 没法直接就这样子用... 得加provider 自定义UserRepository.php

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!