pbmedia / laravel-single-session
防止用户多次登录
Requires
- php: ^7.1
- illuminate/auth: ~5.6.0
- illuminate/config: ~5.6.0
- illuminate/support: ~5.6.0
Requires (Dev)
- guzzlehttp/guzzle: ^6.3
- laravel/passport: ^5.0|^6.0
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.6
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2020-08-28 16:29:48 UTC
README
此包可以防止用户多次登录。当用户登录时,它会销毁之前的会话,从而确保每个用户只有一个会话。它假设您使用Laravel的认证功能。
要求
- 仅支持Laravel 5.6,7.1和7.2。
- 支持包发现。
- 支持Laravel Passport。
注意
- Laravel 5.6.14及以后版本支持开箱即用的无效会话。
- 如果您仍在使用Laravel 5.5,请使用版本1.2.0。
安装
您可以通过composer安装此包
composer require pbmedia/laravel-single-session
使用Artisan CLI工具发布数据库迁移和配置文件。
php artisan vendor:publish --provider="Pbmedia\SingleSession\SingleSessionServiceProvider"
数据库迁移将在users
表中添加一个session_id
字段。运行迁移以开始!
php artisan migrate
现在将\Pbmedia\SingleSession\Middleware\VerifyUserSession
中间件添加到您想要保护的路由中。
用法
由于Laravel 5.5支持包发现,因此您不需要将服务提供者添加到您的app.php
配置文件中。
在single-session.php
配置文件中,您可以指定一个destroy_event
。此事件将在销毁之前的会话时触发。您可能想要使用此来广播事件并在用户界面中处理销毁的会话。事件构造函数可以接受两个参数,即用户模型和销毁的会话ID。以下是一个示例事件
<?php namespace App\Events; class UserSessionWasDestroyed { public $user; public $sessionId; public function __construct($user, $sessionId) { $this->user = $user; $this->sessionId = $sessionId; } public function broadcastOn() { // return new PrivateChannel('channel-name'); } public function broadcastWith() { return ['user_id' => $this->user->id]; } }
当使用Laravel Passport时,它会自动从数据库中修剪并吊销令牌。您可以通过在配置文件中将prune_and_revoke_tokens
选项设置为false
来禁用此功能。
如果您正在使用Laravel Passport的CreateFreshApiToken
中间件,请在CreateFreshApiToken
之前添加Pbmedia\SingleSession\Middleware\BindSessionToFreshApiToken
中间件,并将VerifyUserSessionInApiToken
中间件添加到auth:api
组
$router->get('/', 'HomeController@show')->middleware([ 'web', 'auth', BindSessionToFreshApiToken::class, CreateFreshApiToken::class ]); $router->get('/api', 'ApiController@index')->middleware([ 'api', 'auth:api', VerifyUserSessionInApiToken::class ]);
变更日志
请参阅变更日志以获取最近更改的更多信息。
测试
$ composer test
贡献
请参阅CONTRIBUTING以获取详细信息。
安全
如果您发现任何与安全相关的问题,请发送电子邮件至 pascal@pascalbaljetmedia.com,而不是使用问题追踪器。
致谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。