You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件:

  1. 先引入必要的类:
use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
  1. 重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:37