You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中针对自定义Microservice模型配置Sanctum认证中间件的疑问

Laravel 9中针对自定义Microservice模型配置Sanctum认证中间件的疑问

嘿,我来帮你理清楚这个认证配置的问题~你现在的思路方向是对的,但有个关键的配置细节需要调整,不然认证会失效。

首先修正你的Guard配置

你当前给microservice guard设置的驱动是session,但Sanctum的API Token认证需要用sanctum驱动(session驱动是给基于Cookie的会话认证用的,不适合API token场景)。打开config/auth.php,把microservice guard改成这样:

'guards' => [
    // ...其他guard配置
    'microservice' => [
        'driver' => 'sanctum', // 这里改成sanctum驱动
        'provider' => 'microservices',
    ],
],

然后修改控制器的中间件

你猜的没错,把控制器构造方法里的中间件改成auth:microservice就行,这样中间件就会使用你自定义的guard来验证请求中的Sanctum Token:

public function __construct()
{
    $this->middleware('auth:microservice');
}

额外验证点

  1. 确保你的Microservice模型已经正确引入HasApiTokens trait:
use Laravel\Sanctum\HasApiTokens;

class Microservice extends Model
{
    use HasApiTokens;
    // ...你的模型字段、关联等代码
}

(你提到已经加了,但再确认一下没写错就行)

  1. 当需要在控制器里获取当前认证的微服务实例时,你可以用:
$currentMicroservice = auth('microservice')->user();
// 或者因为中间件指定了guard,直接用$request->user()也可以
$currentMicroservice = $request->user();

为什么要改驱动?

session驱动会尝试从会话Cookie中获取认证信息,而sanctum驱动会自动检查请求头里的Authorization: Bearer {token},并关联到你的Microservice模型去验证token的有效性,这正是你需要的微服务API认证场景。

备注:内容来源于stack exchange,提问作者Ryan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:19:09