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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

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

5年前 评论

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

5年前 评论

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

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

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