Laravel多应用认证问题求助:第二应用误使用第一应用数据库
嘿,这个坑我之前踩过!当两个Laravel应用在同一环境下运行时,很容易出现这种数据库串用的情况,尤其是会话和缓存的锅。下面是一步步的排查和解决方法:
先确认第二个应用的数据库配置
打开第二个应用的.env文件,仔细核对DB_DATABASE、DB_USERNAME、DB_PASSWORD这几个字段,确保它们指向的是第二个应用专属的数据库,而不是第一个应用的。如果.env没问题,再检查config/database.php里的connections.mysql配置,有没有不小心硬编码成第一个应用的数据库信息。清除应用缓存,让新配置生效
Laravel会缓存配置文件,有时候你改了.env但旧缓存还在生效。进入第二个应用的根目录,运行以下命令清空缓存:php artisan config:clear php artisan cache:clear php artisan route:clear修改会话Cookie名称,避免跨应用会话冲突
默认情况下,所有Laravel应用的会话Cookie名字都是laravel_session。如果两个应用在同一个域名下(比如都是localhost),第一个应用的会话Cookie会被第二个应用读取,导致它错误复用第一个应用的数据库连接。
解决方法是在第二个应用的.env里修改SESSION_COOKIE为独一无二的名称:SESSION_COOKIE=laravel_app2_session改完后记得清空浏览器Cookie或者用无痕窗口测试,避免旧Cookie干扰。
关闭数据库持久连接,避免连接复用
如果你用的是PHP-FPM这类运行环境,进程可能会复用之前的数据库连接,导致第二个应用继承第一个应用的连接。可以在第二个应用的config/database.php里给MySQL连接添加配置,关闭持久连接:'mysql' => [ // 其他原有配置... 'options' => [ PDO::ATTR_PERSISTENT => false, ], ],这样每个请求都会建立新的数据库连接,不会和第一个应用的连接混淆。
确认User模型的数据库连接配置
打开第二个应用的app/Models/User.php,检查是否有指定$connection属性:protected $connection = 'mysql';这里的
mysql要对应你在config/database.php里为第二个应用数据库设置的连接名,如果你的第二个应用数据库连接叫mysql_app2,这里就要改成对应的名称。
最后测试的时候,建议先退出第一个应用的登录,或者用不同的浏览器/无痕窗口打开第二个应用,排除会话残留的影响。
内容的提问来源于stack exchange,提问作者laroja

