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'); }
额外验证点
- 确保你的
Microservice模型已经正确引入HasApiTokenstrait:
use Laravel\Sanctum\HasApiTokens; class Microservice extends Model { use HasApiTokens; // ...你的模型字段、关联等代码 }
(你提到已经加了,但再确认一下没写错就行)
- 当需要在控制器里获取当前认证的微服务实例时,你可以用:
$currentMicroservice = auth('microservice')->user(); // 或者因为中间件指定了guard,直接用$request->user()也可以 $currentMicroservice = $request->user();
为什么要改驱动?
session驱动会尝试从会话Cookie中获取认证信息,而sanctum驱动会自动检查请求头里的Authorization: Bearer {token},并关联到你的Microservice模型去验证token的有效性,这正是你需要的微服务API认证场景。
备注:内容来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

