klongchu / laravel-session-out
如果会话过期,通过模态框通知用户
This package is auto-updated.
Last update: 2024-09-25 14:19:14 UTC
README
如果有任何原因(用户有意退出登录/会话有效期已过/用户所有登录设备上的会话都被清除)认证会话不存在,而用户仍在需要登录才能访问的页面或多个页面上,那么显示以下信息:
认证会话已不可用,为了继续当前活动(可能在发布未保存帖子等中间),建议重新登录
用户登录后立即隐藏信息,这正是本软件包的功能所在。
📥 安装
您可以通过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命令发布包含在包中的blade
、js
、css
和config
文件
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以获得更快的输出),请按照以下步骤操作
- 为您的应用程序设置广播并启动
usersession
队列工作进程
php artisan queue:work --queue=default,usersession
- 确保在blade视图中将广播客户端配置
js
文件放在@include
行之上,而不是之下。
<script type="text/javascript" src="{{ asset('js/broadcasting.js') }}"></script> //some html between @include('vendor.sessionout.notify')
- 在
App\Providers\BroadcastServiceProvider
文件的boot
方法中,要求包的频道文件,它包含私有频道认证
require base_path('vendor/klongchu/laravel-session-out/src/routes/channels.php');
- 在用户认证的所有地方调用
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(); }
✔ 更新模态框设计及内容
模态框是用纯js
和css
创建的,没有使用任何框架,因此您可以很容易地通过编辑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()
函数关闭模态框
🧐📑 注意
♻ 当更新包时
请记住在每次更新后发布assets
、views
和config
在更新包后,使用 --force
标签发布最新更新的 最新 包 assets
、views
和 config
但请记住,使用 --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/sessionout
、views/vendor/sessionout
目录,因为这些目录中的文件是可以配置的。如果您修改了文件,则更新后的发布文件将不会包含这些更改,尽管在发布assets
、views
和config
之后,您仍然可以再次修改文件。
🔧 修改完毕后
修改配置文件后,运行此 artisan 命令。
php artisan config:clear php artisan queue:restart // only when using broadcasting
👋🏼 问候一下!
如果您觉得这个包很有用,请在 Twitter | Facebook 上告诉我 👍🏼
🎀 许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。