Laravel:升级5.1 ->9后出现授权错误

bvk5enib  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(193)

我拿到了一个旧的Laravel应用程序,它运行的是v5.1,并使用Shift通过Laravel v9升级了它。
整个应用程序都在登录之后~并且在提交登录表单(正确或失败)时,它返回:

Too few arguments to function App\Providers\AppServiceProvider::App\Providers\{closure}(), 1 passed in /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php on line 421 and exactly 3 expected

并且迹线以app  / Providers / AppServiceProvider.php: 37结束,线37是function ($sql, $bindings, $time)

....
error_reporting(0);

        // public function boot(Guard $auth) {
        view()->composer('*', function ($view) use ($auth) {
            if ($auth->user()) {
                // get the current user
                $currentUser = $auth->user();
                Log::info('Executed by '.$currentUser->email);
                // pass the data to the view
                $view->with('currentUser', $currentUser);
            }
        });

        DB::listen(
            function ($sql, $bindings, $time) {
                $a = print_r($sql, 1);
                $b = print_r($bindings, 1);
                $logmessage = $a;
                if (! empty($b)) {
                    $logmessage .= ' : '.$b;
                }
                Log::info($logmessage);
            }
        );
...

在轮班过程中,关于登录/授权过程,注意到以下情况:
Laravel 5.3将Auth/AuthController.php文件拆分为Auth/LoginController.php和Auth/RegisterController.php。由于您的文件似乎是自定义的,Shift没有删除它。您应该将您的Auth/AuthController.php文件与新添加的控制器进行比较,并相应地合并您的更改。
以及
如果您正在使用身份验证,您应该升级所有使用AuthController和PasswordController的路由,以使用新的身份验证控制器。Laravel建议使用Auth::routes(),它为新的身份验证控制器注册正确的路由。此方法还为/logout注册POST路由,而不是GET路由。
但突出显示的错误行似乎与数据库连接有关...
数据库连接的快速健全性检查:

try {
        \DB::connection()->getPDO();
        echo \DB::connection()->getDatabaseName();
        } catch (\Exception $e) {
        echo 'None';
    }

如预期返回正确的数据库连接。
我不是一个拉拉威尔特定的开发,所以试图蒙混过关,毫无疑问,需要提供更多的调试信息在这里,所以只是让我知道还有什么会有帮助。
先谢了

u0sqgete

u0sqgete1#

在与Shift的帮助团队聊天后,我们推断这是由DB日志记录引起的。
我们移除了那个障碍,一切都解决了。
这个问题可能只是签名不匹配。但不管怎样,您可能不希望在生产中使用这种代码。)

yhxst69z

yhxst69z2#

DB::listen的签名已更改为单个参数,其中包含三个参数作为属性,因此如果您仍然希望记录SQL查询,则需要调整该调用以适应。
(不过,我还是建议用https://github.com/barryvdh/laravel-debugbarhttps://laravel.com/docs/10.x/telescope代替。)
https://laravel.com/docs/10.x/database

use Illuminate\Database\Events\QueryExecuted;

DB::listen(function (QueryExecuted $query) {
    // $query->sql;
    // $query->bindings;
    // $query->time;
});

相关问题