dev-moez/auth-last-activity

一个用于记录多守卫应用程序用户最后活动的软件包

v1 2023-03-14 19:48 UTC

This package is auto-updated.

Last update: 2024-09-14 22:46:40 UTC


README

Auth Last Activity

👱 🕑 多认证最后活动Laravel包

目录

📖 简介

AuthLastActivity 是一个 Laravel 包,支持多个认证守卫以记录应用用户的最后活动。

✨ 功能

  • 支持多个认证守卫
  • 可调整的数据库连接
  • 可以设置在线用户的秒数状态

🧰 安装

您可以通过 composer 安装此包

composer require dev-moez/auth-last-activity

包将自动注册自身。

要发布包所需的配置和迁移文件,请运行以下 artisan 命令

php artisan auth-last-activity:install

或手动

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="auth-last-activity-config"

这是发布配置文件的内容

<?php

return [
	# True/false to enable the package or disable it
	'enabled' => true,

	# Define database connection which the package would use to store last activity for users
	# 'mysql' is set as the default connection, you can change it to another connection as you desire
	'connection' => 'mysql',

	# Define the period in seconds, by which a user status would be defined as 'Online'
	'online-period' => 5,

	# The timezone that the package would use to store the date and time for user's last activity
	# By default the env APP_TIMEZONE will be used otherwise the timezone in the app.php config file would be used
	'timezone' => env('APP_TIMEZONE', config('app.timezone')),

	# Used middleware for api routes
	'middleware' => ['auth'],
];

您可以使用以下命令发布迁移文件

php artisan vendor:publish --tag="auth-last-activity-migrations"

发布迁移文件后,您可以通过运行迁移来创建 user_last_activities

php artisan migrate

⚙️ 配置

步骤 1

要开始使用此包,您必须将中间件 AuthLastActivityMiddleware 添加到您的 Kernel.php 文件中,该文件位于项目的 app\Http 目录下。

为了确保所有通过 web 或 api 的请求都被考虑,您应该在 web & api 数组中都添加此中间件,如下所示

protected $middlewareGroups = [
        'web' => [
            ...
            AuthLastActivityMiddleware::class,
        ],

        'api' => [
            ...
            AuthLastActivityMiddleware::class,
        ],
    ];

步骤 2

HasLastActivity 特性添加到您 Laravel 项目的每个可认证模型中,例如 User 和任何其他用于不同认证守卫的模型,例如在 User 模型上的示例

<?php

namespace App\Models;

use DevMoez\AuthLastActivity\Models\Concerns\HasLastActivity;

class User extends Authenticatable
{
	..
	use HasLastActivity;
}

完成这些操作后,您就可以出发了 🚀!

🚀 使用

获取用户最后活动

安装并配置完包后,它将自动跟踪通过您的应用程序的认证用户的最后活动时间。您可以通过在 User 模型上的 lastActivity 一对一关系来访问最后活动时间 - 或任何其他可认证模型,例如 Admin 等,如下所示

$user = User::findOrFail(100);
$user->lastActivity;

这将返回最后活动数据集合

  • authenticatable_type 是用于记录的可认证模型
  • authenticatable_id 是用于记录的可认证 ID
  • last_activity_url 是用户最后访问的 URL
  • last_activity_time 是用户最后活动的时间戳
  • user_agent 是请求中的用户代理数据
  • ip_address 是用户最后访问 URL 所使用的 IP 地址
  • headers 是请求头,以防您需要它们
  • is_mobile 是一个布尔属性,用于告诉您最后活动是否通过移动设备完成。
  • request_sourceapiweb 的枚举值
  • previous_url 是用户在最后活动 URL 之前访问的 URL。

获取用户状态

要获取用户的在线状态,您可以使用名为 isOnline 的方法

$user = User::findOrFail(100);
$user->isOnline(); // Check ->isOffline() too

获取在线用户

要获取所有在线用户,您可以使用名为 getOnline 的静态方法,例如

$onlineUsers = User::getOnline(); // returns Illuminate\Database\Eloquent\Builder
$onlineAdmins = Admin::getOnline(); // returns Illuminate\Database\Eloquent\Builder

获取离线用户

要获取所有离线用户,您可以使用名为 getOffline 的静态方法,例如

$offlineUsers = User::getOffline(); // returns Illuminate\Database\Eloquent\Builder
$offlineAdmins = Admin::getOffline(); // returns Illuminate\Database\Eloquent\Builder

请注意,获取在线和离线用户基于 online-periodseconds 值,您可以在 auth-last-activity.php 配置文件中找到它。

获取特定时间段内的在线用户

要获取特定秒数内的在线用户,您可以使用 activeWithin(int $seconds) 静态方法,并传递您想使用的秒数。

$users = User::activeWithin(120);

同样,这将返回 eloquent 构建器而不是 User 模型的集合,在最后两分钟内。如果您想要集合,请在前面的代码后添加 ->get()

$users = $users->get();

使用 cache 获取用户在线状态

要使用 cache 获取用户的在线状态,您可以通过在 isOnline 方法的 viaCache 参数中传递 true 来实现。

$user = User::findOrFail(100);
$user->isOnline(viaCache: true)

或者,在您的代码中,您可以使用以下代码片段来实现这一点

use Illuminate\Support\Facades\Cache;

$isOnline = Cache::has('online-auth-{$authenticatable_name}-{$authenticatable_id}');

认证名称是什么?

它是您模型基本名称的 kebab/lowercase。
假设您的项目有两个认证模型

  1. User 默认的认证模型,用于任何 Laravel 项目中的用户
  2. Admin 您为另一守护者创建的,用于管理员的模型

那么,在第一种情况下,$authenticatable_name 应该是 'user',在第二种情况下,$authenticatable_name 应该是 'admin'。

$authenticatable_id 是数据库中此记录的主键。示例

  • 'online-auth-user-10'
  • 'online-auth-admin-1000'

您可以使用名为 getAuthenticatableName() 的静态方法为任何认证模型获取认证名称。

$userAuthenticatableName = User::getAuthenticatableName();
$adminAuthenticatableName = Admin::getAuthenticatableName();

❓ 为什么这个包返回 Eloquent 构建器而不是集合?
此方法适用于大数据集,因为它只从数据库检索必要的数据,使其更快更高效。因此,如果您想进行任何进一步的操作,如过滤、映射等,则最好在构建器上执行,而不是在集合上,完成后再调用 get() 方法来返回集合。

更新

想要更新到最新版本?

composer update dev-moez/auth-last-activity

卸载

composer remove dev-moez/auth-last-activity

许可证

MIT 许可证 (MIT)。

贡献

欢迎贡献!如果您想通过添加新功能或其他增强功能来为包做出贡献,请 fork 存储库并提交拉取请求。

  1. fork 项目
  2. 创建您的功能分支(git checkout -b feature/new-feature-name)
  3. 提交您的更改(git commit -m '添加额外功能')
  4. 推送到分支(git push origin feature/new-feature-name)
  5. 打开拉取请求

请确保您做出的任何贡献或评论都备受赞赏。

联系

Abdelrahman Moez(又名 Moez)- abdelrahman.moez@icloud.com