laravel 11 区分多模块的token

3 篇文章 0 订阅

数据表:用户表(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;

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_最初の心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值