juliomotol/laravel-auth-timeout

v4.1.0 2024-04-01 18:48 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

在Laravel中处理认证超时。

升级到v4时,请参阅CHANGELOG.md

对于Laravel 8+的支持,请参阅v3

对于Laravel 6+的支持,请参阅v2

为什么使用Laravel Auth Timeout?

有时我们希望在用户在一定时间内没有进行任何请求时注销用户。有一个解决方案(见下文)

/* Somewhere in config/session.php */
'lifetime' => 15,

但这会影响整个会话。但不必这样,这正是Laravel Auth Timeout的用武之地。

Laravel Auth Timeout是一个小型中间件包,它检查用户是否在设定时间内进行了任何请求。如果他们达到了空闲时间限制,则在下一次请求时注销。感谢Brian Matovu的文章

安装

您可以通过composer安装此包

composer require juliomotol/laravel-auth-timeout

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

php artisan vendor:publish --tag="laravel-auth-timeout-config"

这是发布配置文件的内容

<?php

return [

    /**
     * The session name used to identify if the user has reached the timeout time.
     */
    'session' => 'last_activity_time',


    /**
     * The minutes of idle time before the user is logged out.
     */
    'timeout' => 15,

    /**
     * The event that will be dispatched when a user has timed out.
     */
    'event' => JulioMotol\AuthTimeout\Events\AuthTimedOut::class,

];

使用方法

快速入门

对于简单使用,在您的Kernel.php中注册CheckAuthTimeout

protected $routeMiddleware = [
    ...
    'auth.timeout' => \JulioMotol\AuthTimeout\Middlewares\CheckAuthTimeout::class,
    ...
];

然后在路由上使用该中间件。

Route::get('/admin', [
    'uses' => 'FooBarController@Foobar',
    'middleware' => ['auth.timeout']
]);

使用不同的守卫

您可能有多个守卫,只想将CheckAuthTimeout应用于某些守卫。我们为您提供了支持,CheckAuthTimeout接受一个$guard参数。

Route::get('/admin', [
    'uses' => 'FooBarController@Foobar',
    'middleware' => ['auth.timeout:custom-guard'] // Add the guard name as a parameter for the auth.timeout middleware.
]);

注意:此包仅适用于使用session驱动器的守卫。

AuthTimedOut

每次用户超时时,都会触发一个AuthTimedOut。您可以在您的EventServiceProvider中为该事件分配监听器。

protected $listen = [
    \JulioMotol\AuthTimeout\Events\AuthTimedOut::class => [
        // ...
    ],
];

AuthTimedOut有两个属性,您可以在您的EventListener中访问。

class FooEventListener
{
    public function handle(AuthTimedOut $event)
    {
        $event->user;
        $event->guard;
    }
}

重定向

要修改用户超时时重定向的行为,您可以在您的AppServiceProvider中使用CheckAuthTimeout::setRedirectTo()来设置重定向回调。

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        CheckAuthTimeout::setRedirectTo(function ($request, $guard){
            return match($guard){
                'custom-guard' => route('some.route'),
                default => route('auth.login')
            }
        });
    }
}

AuthTimeout Facade

此包还提供以下方法的facade:

AuthTimeout::init() // Initialize the timeout session when no has been set yet.

AuthTimeout::check($guard) // Check if a user has timed out and logs them out if so.

AuthTimeout::hit() // Reset the user's timeout session.

AuthTimeout::lastActiveAt() // The last activity time of the user.

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请参阅我们的安全策略,了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。