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

Lumen集成Passport执行migrate报错:Router无middleware方法

问题描述

在Lumen中集成lumen-passport库时,执行php artisan migrate抛出以下错误:

In Facade.php line 338:
Call to undefined method Laravel\Lumen\Routing\Router::middleware()

已添加路由中间件配置:

$app->routeMiddleware([
     'auth' => App\Http\Middleware\Authenticate::class,
 ]); 

以及Passport路由注册代码:

\Dusterio\LumenPassport\LumenPassport::routes($app);

完整app.php代码如下:

<?php

require_once __DIR__.'/../vendor/autoload.php';

(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables(
    dirname(__DIR__)
))->bootstrap();


date_default_timezone_set(env('APP_TIMEZONE', 'UTC'));

$app = new Laravel\Lumen\Application(
    dirname(__DIR__)
);

$app = new \Dusterio\LumenPassport\Lumen7Application(
    dirname(__DIR__)
);

$app->configure('auth');

 $app->withFacades();

 $app->withEloquent();


$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);


$app->configure('app');

$app->configure('oracle');
$app->configure('database');


 $app->routeMiddleware([
     'auth' => App\Http\Middleware\Authenticate::class,
 ]);

$app->register(App\Providers\AppServiceProvider::class);

$app->register(\Illuminate\Mail\MailServiceProvider::class);


$app->register(Laravel\Passport\PassportServiceProvider::class);
$app->register(Dusterio\LumenPassport\PassportServiceProvider::class);
\Dusterio\LumenPassport\LumenPassport::routes($app);

$app->router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) {
    require __DIR__.'/../routes/api.php';
});

return $app;
解决方案

核心问题

你重复实例化了Application对象:先创建原生Laravel\Lumen\Application,随后又将其覆盖为\Dusterio\LumenPassport\Lumen7Application。后续的routeMiddleware配置依赖原生Application的初始化逻辑,重复赋值导致中间件相关路由方法未正确加载,触发middleware()未定义错误。

修复步骤

  1. 删除重复的Application实例化代码,仅保留LumenPassport提供的Application类:
    // 移除这一行
    // $app = new Laravel\Lumen\Application(dirname(__DIR__));
    
    $app = new \Dusterio\LumenPassport\Lumen7Application(
        dirname(__DIR__)
    );
    
  2. 验证版本匹配:确保你的Lumen版本与lumen-passport版本兼容,Lumen7Application对应Lumen 7.x,若使用更高版本Lumen,需替换为对应版本的LumenPassport Application类。
  3. 确认Auth配置:检查config/auth.php,将API guard的driver设置为passport:
    'guards' => [
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
    
  4. 重新执行php artisan migrate。

内容的提问来源于stack exchange,提问作者Julián Oviedo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:14:59