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 协议》,转载必须注明作者和本文链接
:grin:有没有试过从
api
登陆成功获取到的token
,来请求由memberapi
作为中间件的,一样验证可以通过呢?需要处理一下串号问题。当然啦,与这篇内容无关@guaosi 刚看了你的文章。这个问题是要处理下。感谢大佬提醒
方便问下,串号的问题怎么解决?
@fmaple 博客:Laravel jwt 多表(多用户端)验证隔离
Config::set之后 还是走原来的 模型类 为什么