Laravel 单一用户会话管理
项目介绍
laravel-single-session
是一个 Laravel 包,旨在防止用户同时进行多处登录。当用户在一处登录时,该包将销毁之前的会话,确保每个用户账号同一时间只能有一个活跃会话。它设计来兼容 Laravel 5.6 及以上版本(特别是 7.1 和 7.2 得到了支持),并且支持 Laravel 的默认身份验证机制及Package Discovery特性。对于仍在使用 Laravel 5.5 的情况,推荐使用特定的早期版本。
快速启动
安装
通过 Composer 将此包添加到你的 Laravel 项目中:
composer require pbmedia/laravel-single-session
配置
安装完毕后,发布配置文件和数据库迁移:
php artisan vendor:publish --provider="Pbmedia\SingleSession\SingleSessionServiceProvider"
这将会把配置文件 single-session.php
发布到你的 config
目录,并向 users
表添加一个 session_id
字段的数据库迁移。运行迁移以应用更改:
php artisan migrate
最后,在你想保护的路由上添加 \Pbmedia\SingleSession\Middleware\VerifyUserSession
中间件。如果你使用的是 Laravel 5.5 或更高版本,则不需要手动注册服务提供者,因为支持 Package Discovery。
应用案例与最佳实践
在多设备访问控制场景下,例如银行或私密性强的应用中,该包可以确保用户的安全性,阻止恶意登录尝试或无意的数据泄露,当用户从新位置登录时自动注销其他会话。为了增强用户体验,你可以定制事件处理,例如在会话被销毁时通知用户,或通过广播事件更新前端状态。
例如,定义一个事件来监听会话销毁:
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Pbmedia\SingleSession\Events\UserSessionWasDestroyed;
class NotifyUserOfSessionChange extends UserSessionWasDestroyed
{
use SerializesModels;
public function __construct($user, $sessionId)
{
parent::__construct($user, $sessionId);
// 可以在这里发送邮件或者通知给用户
}
}
并在配置文件中指定这个事件:
// config/single-session.php
return [
'destroy_event' => \App\Events\NotifyUserOfSessionChange::class,
];
典型生态项目结合
在实际开发中,结合 laravel-passport
进行 API 认证时,本包能够与之良好集成,自动处理会话与令牌的同步问题。务必注意调整配置以防不必要的令牌撤销,特别是在你需要保留某些令牌的情况下。
// 配置文件中设置,如果不想自动删除Passport的令牌
'prune_and_revoke_tokens' => false,
并确保在使用 CreateFreshApiToken
中间件的API路由前添加 BindSessionToFreshApiToken
中间件,保证会话的一致性。
这个教程概述了如何集成 laravel-single-session
,提供了快速部署和自定义的基础,确保了单一用户会话管理在 Laravel 应用中的高效实现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考