laravel 11 区分多模块的token

server/2024/9/22 23:02:34/

数据表:用户表(users)、管理员表(admin_user),

  • 配置bootstrap/app.php
    'guards' => ['web' => ['driver' => 'session','provider' => 'admin_users',],'home' => ['driver' => 'sanctum','provider' => 'users',],'admin' => ['driver' => 'sanctum','provider' => 'admin_users',]],'providers' => ['admin_users' => ['driver' => 'eloquent','model' => env('AUTH_MODEL', App\Models\AdminUser::class),],'users' => ['driver' => 'eloquent','model' => env('AUTH_MODEL', App\Models\User::class),],],
  • 创建中间件

  • checkHomeEndToken.php

  • checkAdminEndToken.php

 php artisan make:middleware checkHomeEndToken  // home路由使用php artisan make:middleware checkAdminEndToken // admin路由使用
  • 实现中间件
<?phpnamespace App\Http\Middleware;use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;class checkHomeEndToken
{public function handle(Request $request, Closure $next): Response{if ($request->user('home') && $request->user('home')->tokenCan('home-end')) {return $next($request);}return response()->json(['message' => '未登录'], 401);}
}
<?phpnamespace App\Http\Middleware;use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;class checkAdminEndToken
{public function handle(Request $request, Closure $next): Response{if ($request->user('admin') && $request->user('admin')->tokenCan('admin-end')) {return $next($request);}return response()->json(['message' => '未登录'], 401);}
}
  • 配置路由

路由配置到web.php,api路由不使用了。我把web的csrf去掉了。用的也是token

<?phpuse App\Http\Controllers\admin\AuthController;
use Illuminate\Support\Facades\Route;
use App\Http\Middleware\checkAdminEndToken;
use App\Http\Middleware\checkHomeEndToken;// 前台路由
Route::prefix('/')->middleware(['auth:sanctum',checkHomeEndToken::class])->group(function () {// 首页Route::get('',[\App\Http\Controllers\home\IndexController::class,'index']);
});//  后台管理路由
Route::prefix('admin')->middleware(['auth:sanctum',checkAdminEndToken::class])->group(function () {// 登录 不使用auth:sanctumRoute::post('login', [AuthController::class,'login'])->withoutMiddleware(['auth:sanctum',checkAdminEndToken::class]);// 管理员Route::resource('admin-user', \App\Http\Controllers\admin\AdminUserController::class)->except(['create', 'edit']);// 角色Route::resource('role', \App\Http\Controllers\admin\RoleController::class)->except(['create', 'edit']);
});
  • 登录
$token = $request->user()->createToken('admin',['admin-end'])->plainTextToken;

完成


http://www.ppmy.cn/server/118291.html

相关文章

2024ICPC网络赛第一场

A 最终答案与中国队能力值的排名有关&#xff0c;具体每个情况手推一下&#xff0c;用 if else 即可通过。 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(0);int t, a[40];cin >> t;while (t--) {int num 0;f…

如何快速解决程序中的BUG

前提 获得更多信息 - 搞清楚为什么bug会发生什么情况下会发生、用户到底做了什么操作&#xff0c;才导致这个bug、是每次都会出现bug、还是偶发性、是否可以复现&#xff08;不能复现的bug&#xff0c;还能叫bug&#xff09;&#xff1f;拿到用户详细的报错输出明确边界&#…

3D云渲染农场为何怎么贵?主要消耗成本介绍

随着对高质量3D动画的需求持续增长&#xff0c;云渲染农场对于旨在以高效速度生产高质量视觉效果的工作室来说变得至关重要。然而&#xff0c;用户经常想知道为什么渲染农场的价格如此之高&#xff0c;理解背后的原因可以帮助艺术家做出更好的选择。 什么是云渲染农场&#xff…

《深度学习》PyTorch 手写数字识别 案例解析及实现 <上>

目录 一、了解MINIST数据集 1、什么是MINIST 2、查看MINIST由来 二、实操代码 1、下载训练数据集 2、下载测试数据集 运行结果&#xff1a; 3、展示手写数字图片 运行结果&#xff1a; 4、打包图片 运行结果&#xff1a; 5、判断当前pytorch使用的设备 1&#xff…

c语言--力扣简单题目(回文链表)讲解

题目如下&#xff1a; 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表。 如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1…

DockerDocker Compose安装(离线+在线)

Docker&Docker Compose安装(离线在线) Docker离线安装 下载想要安装的docker软件版本&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 如目标机无法从链接下载&#xff0c;可以在本机下载后 scp docker版本压缩包[如docker-20.10.9.tgz] usernameh…

电巢科技携Ecosmos元宇宙产品亮相第25届中国光博会

第25届中国国际光电博览会&#xff08;“CIOE中国光博会”&#xff09;今日在深圳国际会展中心盛大开幕。本届博览会以“光电引领未来&#xff0c;驱动应用创新”为主题&#xff0c;吸引了全球超过3700家优质光电企业参展&#xff0c;展示了光电产业的最新成果和前沿技术。 电…

数据库语言、SQL语言、数据库系统提供的两种语言

1.数据库语言 数据库语言有很多种&#xff0c;其中一种是SQL语言。 2. SQL语言 【几乎所有的关系数据库系统都使用SQL语言。】 SQL语言中包含很多不同的部分&#xff0c;有&#xff1a; &#xff08;1&#xff09;DDL语言&#xff08;Data definition language&#xff09;…