SPA 和外部用户的相同 API 路由

时间:2020-12-28 08:22:17

标签: laravel laravel-sanctum

带有 Sanctum 的 Laravel 8。

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

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

UPD:决定拆分路线

路由/api.php

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

routes/spa.php

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

routes/resources.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,
        ],
    ];

0 个答案:

没有答案