【问题标题】:Protect internal (SPA) routes from other users in Laravel Sanctum保护 Laravel Sanctum 中其他用户的内部(SPA)路由
【发布时间】:2021-05-05 03:44:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: laravel laravel-sanctum


    【解决方案1】:

    经过一番测试,当 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() 无论如何都会返回 true,即使用户没有分配任何能力。

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2021-05-18
      • 2022-01-09
      • 1970-01-01
      • 2021-09-10
      • 2017-11-15
      • 1970-01-01
      • 2019-09-13
      • 2023-03-28
      相关资源
      最近更新 更多