当前位置: 首页 > article >正文

laravel 11 区分多模块的token

数据表:用户表(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路由使用
  • 实现中间件
<?php

namespace 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);
    }
}
<?php

namespace 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

<?php

use 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:sanctum
    Route::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.kler.cn/a/301410.html

相关文章:

  • 【DQ Robotics】基于SVD的全秩矩阵逆
  • 微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)
  • JavaWeb——JS、Vue
  • Ubuntu 18.04 配置sources.list源文件(无法安全地用该源进行更新,所以默认禁用该源)
  • 蓝队基础之网络七层杀伤链
  • InfluxDB时序数据库笔记(一)
  • 区块链-P2P(八)
  • 如何禁用公司电脑上的USB接口?这3个妙计锦囊及奉上!【老板的福音!】
  • 坐牢第三十七天(Qt)
  • 影刀RPA实战:自动化同步商品库存至各大电商平台(二)
  • 骨传导耳机哪个品牌好用?良心测评推荐5大高分骨传导耳机!
  • Python | Leetcode Python题解之第393题UTF-8编码验证
  • 大模型LLM之SpringAI:Web+AI(二)
  • Android——service使用详解
  • 快速上手Spring Boot应用
  • Python语言开发学习之使用Python预测天气
  • 二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)
  • sqlite3 相关知识
  • 嵌入式边缘计算:融合创新与未来展望
  • 有关WSL和docker的介绍
  • Qt-常用控件(3)-多元素控件、容器类控件和布局管理器
  • 在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?
  • Android12_13左上角状态栏数字时间显示右移动
  • 文档大模型,能否真正解决非结构化数据难题
  • 【kubernetes】配置管理中心Configmap运用
  • vue2实现歌曲播放和歌词滚动效果