带有 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,
],
];