Laravel - 更新到 Laravel 10 和 Passport 11 后 v2 端点没有响应

问题描述 投票:0回答:1

将 Laravel 更新到 v10、将 Passport 更新到 v11、将 PHP 更新到 8.2 后 - 我的 laravel 应用程序停止正常工作。所有“正常”端点(例如

/api/user
)都有效。但所有使用 auth 中间件的 v2 端点(例如
/api/v2/user
)都不会。我没有收到任何回复。它只是说“套接字挂起”。 我尝试调试该应用程序,但没有抛出任何错误。此外,该指针无法访问我的 UserController 中的实际函数。看起来这是我收到“套接字挂起”之前执行的最后一行代码:

// vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php
return (new Pipeline($this->app))
            ->send($request)
            ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
            ->then($this->dispatchToRouter());

这是我的作曲家文件:

"require": {
        "php": "^8.2",
        "alymosul/laravel-exponent-push-notifications": "^4.0",
        "awobaz/compoships": "^2.0",
        "barryvdh/laravel-dompdf": "^2.0",
        "eluceo/ical": "^0.16.0",
        "glorand/laravel-model-settings": "^6.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "guzzlehttp/psr7": "^2.4",
        "intervention/image": "^2.5",
        "laravel/cashier": "^14.4",
        "laravel/framework": "^10.0",
        "laravel/helpers": "^1.1",
        "laravel/passport": "^11.0",
        "laravel/tinker": "^2.7.3",
        "laravel/ui": "^4.0",
        "lcobucci/jwt": "^4.1.5",
        "owen-it/laravel-auditing": "^13.0.5",
        "predis/predis": "^1.1",
        "sentry/sentry-laravel": "^3.1",
        "spatie/laravel-permission": "^5.7.0",
        "symfony/process": "^6.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.8",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^7.0",
        "phpunit/phpunit": "^10.0"
    },

要了解 API 版本控制的工作原理,请参阅以下快速概述:

我有一个 APIVersion 中间件:

public function handle(Request $request, Closure $next, $guard)
    {
        if ($guard != 'v1') {
            // Morph user model
            $apiVersion = $guard == '' ? '' : ('\\' . strtoupper($guard) . '\\');
        }

        config(['app.api.version' => $guard]);
        return $next($request);
    }

在我的 RouteServiceProvider 中,我有以下代码:

 Route::group([
            'middleware' => ['api', 'api_version:v1'],
            'namespace'  => "{$this->namespace}",
            'prefix'     => 'api',
        ], function ($router) {
            require base_path('routes/api.php');
        });
        Route::group([
            'middleware' => ['api', 'api_version:v2'],
            'namespace'  => "{$this->namespace}\V2",
            'prefix'     => 'api/v2',
        ], function ($router) {
            require base_path('routes/api/api_v2.php');
        });

因为我使用更新的用户模型,所以我的 auth.php 中还有第二个提供程序

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
        'api_v2' => [
            'driver' => 'passport',
            'provider' => 'users_v2',
        ],
    ],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => 'App\Models\Base\User',
    ],
    'users_v2' => [
        'driver' => 'eloquent',
        'model' => 'App\Models\V2\Base\User',
    ],
],

最后,在我的 api_V2.php 路由文件中,我使用这个组

Route::group(['middleware' => ['auth:api_v2']], function () {

我认为该错误与 Laravel Passport 有关,因为如果我在 auth:api_v2 范围之外的 api_v2 中创建路由,端点将返回数据。 我已经检查了 Laravel 11 的升级指南,但找不到问题所在。

laravel laravel-passport laravel-10
1个回答
0
投票

问题发生在

"glorand/laravel-model-settings": "^6.0"
。该包无法处理
HasSettings
Trait 中的继承。

这个问题已经有一个公开的 PR。

© www.soinside.com 2019 - 2024. All rights reserved.