Laravel 11项目执行命令时报Invalid key supplied错误求助
环境配置:Laravel 11 - Ubuntu 24.04 - PHP 8.3 - Composer 2.7.1
从GitLab拉取Laravel项目后,执行composer install时出现以下错误:
Invalid key supplied at vendor/league/oauth2-server/src/CryptKey.php
所有php artisan命令都会触发相同错误,同时发现storage目录下没有密钥文件。项目的composer.json内容如下:
{ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.2", "aws/aws-sdk-php": "^3.308", "dedoc/scramble": "^0.9.0", "google/apiclient": "^2.16", "google/apiclient-services": "^0.362.0", "laravel/framework": "^11.0", "laravel/passport": "*", "laravel/socialite": "^5.14", "laravel/tinker": "^2.9", "owen-it/laravel-auditing": "^13.6", "pkpass/pkpass": "^2.3", "rap2hpoutre/fast-excel": "^5.4", "saloonphp/laravel-http-sender": "^3.0", "saloonphp/laravel-plugin": "^3.0", "saloonphp/saloon": "^3.0", "sentry/sentry-laravel": "^4.5", "spatie/laravel-data": "^4.6", "spatie/laravel-medialibrary": "^11.4", "spatie/laravel-permission": "^6.7" }, "require-dev": { "barryvdh/laravel-ide-helper": "^3.0", "deployer/deployer": "*", "fakerphp/faker": "^1.23", "laravel/pint": "^1.15", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "phpunit/phpunit": "11.1.3", "spatie/laravel-ignition": "^2.4" }, "autoload": { "files": [ "app/Support/helpers.php" ], "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-update-cmd": [ "@php artisan vendor:publish --tag=laravel-assets --ansi --force" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi", "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" ], "ide-helper": [ "php artisan ide-helper:gen", "php artisan ide-helper:models --no-interaction --write --reset" ], "pint": [ "./vendor/bin/pint" ], "clear-laravel-caches": [ "@php artisan optimize:clear --env=testing" ], "refresh-testing-database": [ "@php artisan qa:drop-parallel-test-databases --env=testing", "@php artisan migrate:fresh --env=testing" ], "test-coverage": [ "@clear-laravel-caches", "@refresh-testing-database", "./vendor/bin/pest --coverage --parallel --recreate-databases" ], "test": [ "@clear-laravel-caches", "@refresh-testing-database", "./vendor/bin/pest --parallel --recreate-databases" ], "test-coverage-xdebug": [ "XDEBUG_MODE=coverage php artisan test --coverage" ] }, "extra": { "laravel": { "dont-discover": [] } }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "allow-plugins": { "pestphp/pest-plugin": true, "php-http/discovery": true } }, "minimum-stability": "stable", "prefer-stable": true }
这个错误源于项目依赖Laravel Passport,而Passport需要加密密钥完成初始化,但当前项目缺少必要的密钥文件和环境配置,且composer install触发的package:discover命令会提前加载Passport导致报错。按以下步骤解决:
跳过脚本完成依赖安装
先执行不带脚本的composer安装,避免触发Passport的初始化检查:composer install --no-scripts配置环境变量
复制示例环境文件并设置基础配置:cp .env.example .env编辑
.env文件,确保APP_KEY字段存在(后续会自动生成),并配置好数据库等必要信息。生成Laravel应用密钥
执行命令生成APP_KEY:php artisan key:generate生成Passport加密密钥
现在可以正常执行artisan命令,生成Passport所需的密钥文件:php artisan passport:keys执行后会在
storage/oauth-private.key和storage/oauth-public.key生成密钥文件。执行剩余的composer脚本
最后运行composer的post-install脚本,完成包发现和其他初始化:composer run-script post-autoload-dump
完成以上步骤后,再执行php artisan命令或后续操作就不会再触发密钥错误了。
内容的提问来源于stack exchange,提问作者Roberto Jobet

