devsrv / laravel-session-out
如果会话过期,通过模态框通知用户
Requires
- php: ^7.1.3
- illuminate/support: ^5.7
README
如果由于任何原因(用户有意退出登录 / 会话有效期已过 / 用户所有登录设备的会话都被清除)认证会话不存在,而用户仍在需要登录的页面或多个页面上,那么显示以下消息:
认证会话已不可用,要继续当前活动(可能是在发布未保存的帖子等过程中),建议您重新登录
用户登录后立即隐藏消息正是本包的功能。
📥 安装
您可以通过composer安装此包
composer require devsrv/laravel-session-out
Laravel 5.5+用户:此步骤可以跳过,因为我们可以在框架中自动注册此包。
// Add the ServiceProvider to the providers array in // config/app.php 'providers' => [ '...', 'devsrv\sessionout\sessionExpiredServiceProvider::class', ];
您需要使用以下Artisan命令发布包含在包中的blade
、js
、css
和config
文件:
php artisan vendor:publish --provider="devsrv\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/devsrv/laravel-session-out/src/routes/channels.php');
- 在所有用户认证的地方调用
devsrv\sessionout\classes\AuthState::sessionAvailable()
。如果您正在使用自定义逻辑登录用户,请在登录成功时将此行放在认证方法中。
如果您使用Laravel的默认认证系统,则更好的选择是创建登录事件的监听器,例如:
// App\Providers\EventServiceProvider protected $listen = [ 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\SuccessfulLogin', ], ];
// App\Listeners\SuccessfulLogin use devsrv\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="devsrv\sessionout\sessionExpiredServiceProvider" --force php artisan vendor:publish --provider="devsrv\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)。有关更多信息,请参阅 许可证文件。