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

如何在Laravel中获取当前用户登录时间并计算登录时长(优先不使用Events)

获取Laravel当前用户登录时间并计算已过秒数(非Events实现)

嘿,我来给你分享个不用Events就能搞定的方案,完美解决你要获取当前用户登录时间、计算登录后已过去秒数的需求~

第一步:给用户表添加登录时间字段

Laravel默认的用户表没有存储登录时间的字段,所以咱们先给users表加个last_login_at字段:

  1. 生成迁移文件:
    php artisan make:migration add_last_login_at_to_users_table --table=users
    
  2. 打开生成的迁移文件,在up方法里添加字段:
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->timestamp('last_login_at')->nullable();
        });
    }
    
  3. 执行迁移,把字段加到数据库里:
    php artisan migrate
    

第二步:用户登录时更新登录时间

不用Events的话,咱们直接在登录控制器里重写authenticated方法,用户登录成功后就更新这个字段:
打开app/Http/Controllers/Auth/LoginController.php,添加下面的方法:

use Illuminate\Http\Request;

protected function authenticated(Request $request, $user)
{
    // 更新当前用户的登录时间为当前时间
    $user->update([
        'last_login_at' => now()
    ]);
}

如果是你自己写的自定义登录逻辑,那就在验证用户账号密码通过后,直接调用$user->update(['last_login_at' => now()])就行,原理是一样的。

第三步:计算登录后已过去的秒数

现在只要用户登录过,last_login_at就有值了,咱们可以在控制器、视图或者任何需要的地方计算已过秒数:

在控制器里使用:

use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;

// 先确保用户已登录
if (Auth::check()) {
    // 解析登录时间为Carbon实例
    $loginTime = Carbon::parse(Auth::user()->last_login_at);
    // 计算和当前时间的秒数差
    $elapsedSeconds = $loginTime->diffInSeconds(now());
    
    // 现在$elapsedSeconds就是登录后已过去的秒数啦
}

在Blade视图里直接显示:

@auth
    你已经登录了 {{ Carbon\Carbon::parse(auth()->user()->last_login_at)->diffInSeconds(now()) }} 秒
@endauth

额外补充(可选)

如果你的项目开启了「记住登录」功能,用户下次自动登录时也想更新登录时间的话,可以自定义一个中间件,在用户通过记住登录自动认证时更新last_login_at。不过如果只是需要普通登录的时间,上面的步骤完全够用啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:21