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

Laravel 11运行migrate:fresh后如何保持登录状态?

Laravel 11 运行migrate:fresh后保持登录状态的解决办法

运行migrate:fresh会清空所有数据库表,包括sessions会话表和users用户表(若未保留数据),这是导致你被强制退出的核心原因。以下是几个实用的解决思路:

1. 自定义迁移命令,自动重登用户

封装migrate:fresh为自定义命令,在执行迁移前后记录并恢复当前登录状态:

  • 生成自定义命令:
php artisan make:command FreshMigrateKeepLogin
  • 编辑app/Console/Commands/FreshMigrateKeepLogin.php的handle方法:
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Artisan;

public function handle()
{
    // 记录当前登录用户ID
    $userId = Auth::id();

    // 执行migrate:fresh,支持--seed参数
    $this->call('migrate:fresh', [
        '--seed' => $this->option('seed'),
    ]);

    // 若之前有登录用户,重新登录
    if ($userId && $user = \App\Models\User::find($userId)) {
        Auth::login($user);
        $this->info("已自动重新登录用户:{$user->email}");
    }
}
  • 在routes/console.php中注册命令:
Artisan::command('migrate:fresh:keep-login', \App\Console\Commands\FreshMigrateKeepLogin::class)
    ->describe('执行migrate:fresh并保留当前登录状态');

之后开发时用这个命令替代原生migrate:fresh:

php artisan migrate:fresh:keep-login --seed

2. 切换会话驱动为文件(开发环境专用)

若默认会话驱动是database,migrate:fresh会清空sessions表导致会话丢失。改成file驱动后,会话数据存在本地文件中,不受数据库迁移影响:

  • 修改.env文件:
SESSION_DRIVER=file

注意:此方案需确保users表在迁移后有对应用户数据(比如通过seed固定填充),否则即使会话存在,用户记录丢失仍会退出登录。

3. 固定开发环境用户,迁移后自动登录

如果开发环境有固定测试用户,可在seed中确保该用户存在,迁移完成后自动登录:

在DatabaseSeeder.php中添加:

public function run()
{
    // 创建或获取固定测试用户
    $user = \App\Models\User::firstOrCreate(
        ['email' => 'test@example.com'],
        ['name' => '测试用户', 'password' => bcrypt('password123')]
    );

    // 仅在开发环境自动登录
    if (app()->environment('local')) {
        Auth::login($user);
    }
}

这样每次执行migrate:fresh --seed后,都会自动登录这个固定用户。

内容的提问来源于stack exchange,提问作者kejedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:00:04