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

Laravel8未配置Sanctum中间件时如何通过Bearer Token获取用户ID

解决方案

方案1:手动调用Sanctum guard验证(推荐)

不需要给路由加auth:sanctum中间件,直接在业务逻辑里手动判断用户登录状态即可,Sanctum guard会自动识别请求头中的Token,有有效Token则返回对应用户,无Token则返回null,不会触发未登录拦截:

$is_fav = false;
// 手动调用sanctum guard获取用户
$user = \Auth::guard('sanctum')->user();
// 只有登录用户才判断收藏状态
if ($user) {
    $is_fav = UserFav::where('user_id', $user->id)
        ->where('project_id', $id)
        ->exists();
}

方案2:手动解析Bearer Token获取用户

如果你需要自行解析Token处理逻辑,可以直接操作Sanctum的Token表查询:

use Laravel\Sanctum\PersonalAccessToken;

$is_fav = false;
// 获取请求中的Bearer Token
$bearer = $request->bearerToken();
if ($bearer) {
    // 查询Token记录
    $token = PersonalAccessToken::findToken($bearer);
    // 验证Token有效性、关联用户存在性、是否过期
    if ($token && $token->tokenable && !$token->expires_at?->isPast()) {
        $user = $token->tokenable;
        $is_fav = UserFav::where('user_id', $user->id)
            ->where('project_id', $id)
            ->exists();
    }
}
优化提示
  • 原代码中get()->isEmpty()的写法可以替换为exists(),后者仅做存在性查询,SQL性能更高
  • 不要直接依赖request()->user(),默认情况下它只会读取默认guard的用户,未指定sanctum guard时就会返回null

内容的提问来源于stack exchange,提问作者Mokhtar Ghaleb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:45:05