klongchu/laravel-session-out

如果会话过期,通过模态框通知用户

1.0.0 2024-05-25 13:40 UTC

This package is auto-updated.

Last update: 2024-09-25 14:19:14 UTC


README

Latest Version on Packagist GitHub license Total Downloads Laravel Support GitHub issues

如果有任何原因(用户有意退出登录/会话有效期已过/用户所有登录设备上的会话都被清除)认证会话不存在,而用户仍在需要登录才能访问的页面或多个页面上,那么显示以下信息:

认证会话已不可用,为了继续当前活动(可能在发布未保存帖子等中间),建议重新登录

用户登录后立即隐藏信息,这正是本软件包的功能所在。

📥 安装

您可以通过composer安装此包

composer require klongchu/laravel-session-out

Laravel 5.5+ 用户:此步骤可能可以跳过,因为我们可以在框架中自动注册该包。

// Add the ServiceProvider to the providers array in
// config/app.php

'providers' => [
    '...',
    'klongchu\sessionout\sessionExpiredServiceProvider::class',
];

您需要使用以下Artisan命令发布包含在包中的bladejscssconfig文件

php artisan vendor:publish --provider="klongchu\sessionout\sessionExpiredServiceProvider"

⚗️ 使用

只需将blade文件包含到所有仅对认证用户可用的blade视图中。

@include('vendor.sessionout.notify')

而不是将此行复制多次到视图中,扩展您的基blade视图,并在底部包含它

🛠 配置

✔ 配置文件

发布供应商将创建config/expiredsession.php文件

return [
	// the number of seconds between ajax hits to check auth session
    'gap_seconds' => 30,

    // whether using broadcasting feature to make the modal disappear faster
    'avail_broadcasting' => false,

✔ 如果您想利用广播

** 如果您正在使用avail_broadcasting = true(即想使用Laravel Echo以获得更快的输出),请按照以下步骤操作

  1. 为您的应用程序设置广播并启动usersession队列工作进程
php artisan queue:work --queue=default,usersession
  1. 确保在blade视图中将广播客户端配置js文件放在@include行之上,而不是之下。
<script type="text/javascript" src="{{ asset('js/broadcasting.js') }}"></script>
//some html between
@include('vendor.sessionout.notify')
  1. App\Providers\BroadcastServiceProvider文件的boot方法中,要求包的频道文件,它包含私有频道认证
require base_path('vendor/klongchu/laravel-session-out/src/routes/channels.php');
  1. 在用户认证的所有地方调用klongchu\sessionout\classes\AuthState::sessionAvailable()。如果您正在使用自定义登录逻辑,则将此行放在您的登录方法中登录成功时。

    如果您正在使用Laravel的默认认证系统,则更好的选择是创建登录事件的监听器,例如:

// App\Providers\EventServiceProvider

protected $listen = [
        'Illuminate\Auth\Events\Login' => [
            'App\Listeners\SuccessfulLogin',
        ],
    ];
// App\Listeners\SuccessfulLogin

use klongchu\sessionout\classes\AuthState;

/**
* Handle the event.
*
* @param  Login  $event
* @return void
*/
public function handle(Login $user)
{
	AuthState::sessionAvailable();
}

✔ 更新模态框设计及内容

模态框是用纯jscss创建的,没有使用任何框架,因此您可以很容易地通过编辑views/vendor/sessionout/modal.blade.php来自定义模态框内容,并通过编辑public/vendor/sessionout/css/session-modal.css来自定义设计

✔ 高级

  • 🔘 如果您想自定义负责检查认证会话和模态框显示的js文件,则修改public/vendor/sessionout/js/main.js文件,但不要忘记使用webpack编译它并将编译后的js放置为public/vendor/sessionout/dist/js/main.js

  • 🔘 您可能想在模态框中创建一个登录表单,首先在views/vendor/sessionout/modal.blade.php中创建html表单,然后在public/vendor/sessionout/js/main.js中放置ajax代码,并不要忘记按照上述说明进行编译,

    ajax成功后,通过调用closeSessionOutModal()函数关闭模态框

🧐📑 注意

♻ 当更新包时

请记住在每次更新后发布assetsviewsconfig

在更新包后,使用 --force 标签发布最新更新的 最新assetsviewsconfig

但请记住,使用 --force 标签将替换所有可发布的文件

php artisan vendor:publish --provider="klongchu\sessionout\sessionExpiredServiceProvider" --force

php artisan vendor:publish --provider="klongchu\sessionout\sessionExpiredServiceProvider" --tag=public --force

在更新包时,备份 config/expiredsession.php 文件以及 public/vendor/sessionoutviews/vendor/sessionout 目录,因为这些目录中的文件是可以配置的。如果您修改了文件,则更新后的发布文件将不会包含这些更改,尽管在发布 assetsviewsconfig 之后,您仍然可以再次修改文件。

🔧 修改完毕后

修改配置文件后,运行此 artisan 命令。

php artisan config:clear
php artisan queue:restart // only when using broadcasting

👋🏼 问候一下!

如果您觉得这个包很有用,请在 Twitter | Facebook 上告诉我 👍🏼

🎀 许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件