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

Laravel Sanctum请求auth:sanctum接口报错Route [login] not defined如何解决

错误产生原因
  • 身份校验触发默认重定向逻辑:你请求/api/user接口时未携带有效的Sanctum身份凭证(正确的Token/跨域请求未携带合法会话Cookie),auth:sanctum中间件校验失败后,Laravel默认会将未认证请求重定向到命名路由login。
  • 缺少对应命名路由:routes/api.php内定义的路由默认携带/api前缀,你未在API路由组中定义名为login的路由,也没有修改未认证请求的响应逻辑,因此直接抛出路由不存在异常。
解决方案

根据你使用的Sanctum认证模式选择对应处理方案:

方案1:Token模式(前后端完全分离、移动端API场景)

  1. 新增登录接口并设置login路由名,解决路由不存在报错,同时生成Sanctum Token返回给前端,示例代码(写入routes/api.php):
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;

Route::post('/login', function (Request $request) {
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    $user = User::where('email', $request->email)->first();

    if (! $user || ! Hash::check($request->password, $user->password)) {
        throw ValidationException::withMessages([
            'email' => ['登录凭证错误'],
        ]);
    }

    // 生成接口访问Token返回给前端
    return [
        'code' => 200,
        'token' => $user->createToken('common-api-token')->plainTextToken
    ];
})->name('login');
  1. Postman调试时,先调用/api/login接口拿到Token,之后请求/api/user时,在请求头添加两个参数即可:
    • Accept: application/json(告诉Laravel返回JSON格式响应,不触发跳转)
    • Authorization: Bearer 你刚才获取的Token(携带身份凭证通过校验)

方案2:会话Cookie模式(同域Laravel+Vue SPA单页应用场景)

  1. 修改未认证请求的响应逻辑,打开app/Http/Middleware/Authenticate.php,修改redirectTo方法:
protected function redirectTo(Request $request): ?string
{
    // 仅非JSON请求才跳转登录页,JSON请求直接返回401
    return $request->expectsJson() ? null : route('login');
}
  1. 前端请求配置:Vue端请求库(如Axios)开启withCredentials = true,登录前先请求/sanctum/csrf-cookie初始化CSRF凭证,后续请求会自动携带会话Cookie通过Sanctum校验,示例代码:
import axios from 'axios'
axios.defaults.withCredentials = true

// 登录流程示例
async function login(loginForm) {
    // 先初始化CSRF Cookie
    await axios.get('/sanctum/csrf-cookie')
    // 再提交登录请求
    await axios.post('/login', loginForm)
    // 后续请求/api/user自动携带凭证
}
  1. 确认配置项:config/sanctum.php的stateful配置已添加前端域名(含端口号),config/cors.php的supports_credentials设置为true。

内容的提问来源于stack exchange,提问作者Moemen Hussein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:27:04