Laravel 9 出现Route [login]未定义错误,求技术解决方案
解决Laravel 9中「Route [login] not defined」错误
问题原因
你的API路由使用了auth:sanctum中间件,当用户未通过认证时,Laravel默认会尝试跳转到名为login的命名路由,但你当前的登录路由仅定义了URL,没有设置路由名称,因此触发该错误。
解决方案
方案1:为登录路由添加名称
修改routes/api.php中的登录路由,添加路由名称定义:
Route::post('login', [UserController::class,'login'])->name('login');
添加完成后,执行以下命令刷新路由缓存:
php artisan route:clear php artisan route:cache
方案2:自定义API未认证响应(推荐)
由于是API接口场景,返回JSON格式的错误响应比跳转路由更合理。修改app/Exceptions/Handler.php文件:
- 先引入必要的类:
use Illuminate\Auth\AuthenticationException; use Illuminate\Http\Request;
- 重写
unauthenticated方法:
protected function unauthenticated($request, AuthenticationException $exception) { if ($request->is('api/*')) { return response()->json([ 'message' => '未授权,请先登录', 'status' => 401 ], 401); } return parent::unauthenticated($request, $exception); }
修改后,API接口未认证时会直接返回JSON错误信息,不再寻找login路由。
额外优化建议
你的Kernel.php中api中间件组存在重复配置项,可优化为:
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
内容的提问来源于stack exchange,提问作者Q8root
相关产品推荐
相关产品推荐

