Laravel — 了解用户上次在线的时间
本文是我在重构 Pulse 的代码库时记录下的见解,变更和反思系列文章的一部分。Pulse 是一个为开发人员设计的无痛且经济实惠的站点和服务器监控工具。
今天,我将讨论我是如何添加中间件功能来记录用户上次在线 / 使用该应用程序的时间。我想将其添加到 Pulse 中,以解决一些我需要回答的分析性问题。
准备数据库
如果我们要记录用户上次的在线时间,则需要为此在 users 表中添加时间戳。这是一个简单的步骤,因此我们将从此开始。将以下内容插入到用户表迁移中:
$table->timestamp("last_online_at")->useCurrent();
接下来,我们希望 Laravel 将此属性识别为 Carbon 实例,以便我们可以利用其大量的日期和时间功能集。因此,在 User 模型类中,我们将其添加到 $casts 数组中:
class User
{
protected $casts = ["last_online_at" => "datetime"];
}
为应用添加逻辑
由于我们希望能够从应用程序的任何潜在入口点设置 / 更新此值,所以存储逻辑的理想位置是在中间件类中。因此,让我们继续创建一个:
namespace App\Http\Middleware;
use DB;
use Closure;
class LastOnlineAt
{
public function handle($request, Closure $next)
{
if (auth()->guest()) {
return $next($request);
}
if (auth()->user()->last_online_at->diffInHours(now()) !== 0)
{
DB::table("users")
->where("id", auth()->user()->id)
->update(["last_online_at" => now()]);
}
return $next($request);
}
}
这里发生了相当多的事情,所以让我们将其分解为…
1. 首先检查用户是否为访客。如果是,我们将继续,因为我们无法为访客用户设置时间戳。
2. 如果用户经过身份验证,我们将检索他们上次在线的时间戳。
3. 接下来,我们确定此时间戳是否超过一小时 (这是我添加的检查,以避免在每次请求时更新数据库,但您可以将此检查设置为您想要的任何内容,或完全删除它)。
4. 假设时差超过一小时,我们将使用当前时间更新数据库中的时间戳。
5. 无论是否执行了第 4 步,我们都将继续处理用户的请求 (无论请求如何)。
您可能想知道为什么我不是直接更新经过身份验证的用户,而是使用 DB facade?
好吧,如果我们更新模型本身,这将导致它触发事件,并且还将 update_at 时间戳也设置为当前时间。从技术上讲,用户记录实际上并没有得到更新,我们只是设置了他们的最后上线时间。因此,我认为使用 DB facade 是更好的选择。
最后一步
所剩下的就是我们指示 Laravel 使用这个中间件。我们在应用程序的 HTTP kernel 中实现它。只需将类添加到
$MiddlewareGroups 属性内的 web 和 api 数组,例如:
protected $middlewareGroups = [
"web" => [LastOnlineAt::class],
"api" => [LastOnlineAt::class],
];
现在,只要通过身份验证的用户访问 web 或 api 路由,Laravel 都会设置其 last_online_at 时间戳。干净利落!
我的官方群点击此处加入群聊【PHP/web/高级学习交流群】,一起学习,相互讨论。
群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。
这套精品PHP教程绝不是市场上的那些妖艳贱货可比,作为web开发的佼佼者PHP并不逊色其他语言,加上Swoole后更加是如虎添翼!进军通信 、物联网行业开发百度地图、百度订单中心、虎牙、战旗TV等!寒冬裁员期过后正是各大企业扩大招人的时期,现在市场初级程序员泛滥,进阶中高级程序员绝对是各大企业急需的人才,这套学习教程适合那些1-5年以内的PHP开发者正处于瓶颈期,想要突破自己进阶中高级、架构师!名额有限,先到先得!
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)
部分资料截图:
image image[图片上传失败...(image-a9a233-1594198465796)]
还有限时精品福利:
★腾讯高级PHP工程师笔试题目
★亿级PV高并发场景订单的处理
★laravel开发天猫商城组件服务
★战旗TV视频直播的架构项目实战
扫描下面二维码领取
对PHP后端技术,对PHP架构技术感兴趣的朋友,我的官方群点击此处,一起学习,相互讨论。
群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。
本课程深度对标腾讯T3-T4标准,贴身打造学习计划为web开发人员进阶中高级、架构师提升技术,为自己增值涨薪!加入BAT特训营还可以获得内推大厂名额以及GO语言学习权限!!!
网友评论