保护 Laravel Sanctum 中其他用户的内部 (SPA) 路由

Protect internal (SPA) routes from other users in Laravel Sanctum

我已经配置了 Laravel Sanctum 并且一切都在我的 SPA 上工作,但是如果用户创建了一个令牌,他们可以检查我的网站并调用我的内部 SPA 路由(这不适合他们使用), 我现在拥有的是:

Route::middleware('auth:sanctum')->group(callback: function () {
    Route::get('/user', function (Request $request) {
        return new UserResource($request->user());
    });
});

如何阻止除我的 SPA 之外的所有用户访问此路由?

经过一些测试,当 Sanctum 验证 UI 请求时,它会在 $request 上设置会话,而当用户调用时没有为他们设置会话。

我创建了一个中间件并将其提供给我的内部路由,代码如下:

class InternalApi
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if ($request->hasSession()) {
            return $next($request);
        } else {
            return response()->json([], 401);
        }
    }
}

我的 api.php 现在看起来像这样:

Route::middleware('auth:sanctum')->group(callback: function () {
    Route::get('/user', function (Request $request) {
        return new UserResource($request->user());
    })->middleware('internal');
});

更新:documentation 所述,对于 SPA 请求 $request->user()->tokenCan() 将 return无论如何都是真的,即使用户没有分配任何能力。