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 协议》,转载必须注明作者和本文链接
这个看了更新文档后也才知道这个功能,也都使用上了。文档太低调了
请问如果这样的话,策略和门怎么去使用?策略和门似乎只支持单用户模型,在同一个数据模型中。
@Z_Laravel 大佬,请教下,您的token过期校验和刷新是怎么处理的呀?
修改状态码,用异常处理会不会更方便一点?不过也不知道异常处理要捕获那个exception。毕竟passport返回的信息都是英文也不只支持local。 中间件我只想用来做token刷新机制。
这种情况下 createToken('name')->accessToken; 不适用,因为createToken 只能用配置好的PASSPORT_PERSONAL_ACCESS_CLIENT。
laravel 5.8 没法直接就这样子用... 得加provider 自定义UserRepository.php