jwt 多用户认证,一次简单处理。

教程#

https://www.jianshu.com/p/9e95a5f8ac4a 前面教程部分,不多解释

auth.php 配置文件 我配置了 2 个 guards,默认的 guard 是 api#

'defaults' => [
  'guard' => 'api',
],
'guards' => [
  'api' => [
  'driver' => 'jwt',
  'provider' => 'admins',
      ],
'memberapi' => [
  'driver' => 'jwt',
  'provider' => 'members',
    ],
],

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

按照教程写中间件 我这里写了 2 个#

RefreshToken.php和 MemberRefreshToken.php

路由部分代码根据教程你会举一反三去这么写#

第一个路由
Route::group([
  'middleware' => ['refresh.token']
], function ($router) {
});
第二个路由
Route::group([
  'middleware' => ['member.refresh.token']
], function ($router) {
});

然后你会发现第二个路由验证 token 始终过不了,走的是 adminusers 表。

经过天人思考,我大概知道了原因,所以我想到了个骚操作。#

我再写了一个中间件

namespace App\Http\Middleware;
use Closure;
class ChangAuth
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        \Config::set( 'auth.defaults.guard','memberapi');
        return $next($request);
    }
}

然后把第二个路由

Route::group([
  'middleware' => ['chang.auth','member.refresh.token']
], function ($router) {

});

然后你就会发现成功了。他验证了不同的用户表。
哈哈,经过大佬提醒,还有个串号的 bug 在里面,解决方法出门左拐,大佬博客。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

:grin:有没有试过从 api 登陆成功获取到的 token, 来请求由 memberapi 作为中间件的,一样验证可以通过呢?需要处理一下串号问题。当然啦,与这篇内容无关

6年前 评论

@guaosi 刚看了你的文章。这个问题是要处理下。感谢大佬提醒

6年前 评论

Config::set 之后 还是走原来的 模型类 为什么

5年前 评论
全场我最姜姜姜丶 (楼主) 5年前
hetaoov 5年前
hetaoov 5年前
ted12 (作者) 5年前