pbmedia/laravel-single-session

此包已被废弃,不再维护。未建议替换包。

防止用户多次登录

2.0.0 2018-06-25 12:45 UTC

This package is auto-updated.

Last update: 2020-08-28 16:29:48 UTC


README

Latest Version on Packagist Software License Build Status Quality Score Total Downloads

此包可以防止用户多次登录。当用户登录时,它会销毁之前的会话,从而确保每个用户只有一个会话。它假设您使用Laravel的认证功能

要求

注意

  • 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)。有关更多信息,请参阅 许可文件