首页 > 解决方案 > SPA 和外部用户的相同 API 路由

问题描述

Laravel 8 与Sanctum

我计划为 SPA 和外部用户使用相同的 API 路由。问题是 Sanctum 需要将EnsureFrontendRequestsAreStateful中间件添加到“api”中间件组中,这使得我的 API “有状态”。对于 SPA 来说这很好,但我想让它保持“无状态”,以便通过令牌身份验证进行外部调用。

最简单的解决方案是使用不同的中间件组将 SPA 和外部路由分开。没那么优雅!请提供更好的建议:)

UPD:决定拆分路由

路线/api.php

Route::middleware('auth:sanctum')->as('api.')->group(function () {
    require 'resources.php';
});

路线/水疗中心.php

Route::middleware('auth:sanctum')->as('spa.')->group(function () {
    require 'resources.php';
});

路线/资源.php

Route::apiResources([
    'products' => 'Api\ProductController',
]);

App\Providers\RouteServiceProvider

public function boot()
{
    $this->routes(function () {

       ....

        Route::prefix('spa')
            ->middleware('spa')
            ->namespace($this->namespace)
            ->group(base_path('routes/spa.php'));
    });
}

应用\Http\内核

    protected $middlewareGroups = [

      ....
        
        // Stateless, external calls
        'api' => [
            'throttle:api',
            SubstituteBindings::class,
        ],

        // SPA, stateful, internal use
        'spa' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            'SubstituteBindings::class,
        ],
    ];

标签: laravellaravel-sanctum

解决方案


推荐阅读