quantical-solutions / session-out-modal-laravel
通过模态框通知用户会话已过期
Requires
- php: >=7.1.3
- illuminate/support: >=5.7
README
从devsrv / laravel-session-out升级版本,该版本自Laravel v5.*以来未维护,所以非常感谢devsrv的出色工作!
如果由于任何原因(用户有意退出登录 / 会话有效期已过 / 清除用户所有登录设备的会话)认证会话不存在,但用户仍然在需要用户登录的页面或多个页面上,那么显示一条消息
认证会话不再可用,并且要继续当前活动(可能在发布未保存帖子等中间),建议您重新登录
然后隐藏消息就是这个包的全部内容。
📥 安装
您可以通过composer安装此包
composer require quantical-solutions/laravel-session-out
Laravel 5.5+用户:此步骤可以跳过,因为我们可以在框架中自动注册包。
// Add the ServiceProvider to the providers array in // config/app.php 'providers' => [ '...', 'Quantic\SessionOut\SessionExpiredServiceProvider::class', ];
您需要使用以下Artisan命令发布包含在包中的blade、js、css和config文件
php artisan vendor:publish --provider="Quantic\SessionOut\SessionExpiredServiceProvider"
⚗️ 使用
只需将blade文件包含到所有仅对认证用户可用的blade视图中。
@include('vendor.session-out.notify')
而不是重复复制这一行到视图中,扩展您的base blade视图,并在底部包含它
🛠 配置
✔ 配置文件
发布供应商将创建config/expired-session.php文件
return [ // 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
- 请确保将广播客户端配置
js文件放在@include行之后而不是下面,在您的blade视图中。
@include('vendor.session-out.notify')
别忘了在
resources/js/app.js的最后添加require("./session")。
require("./bootstrap"); require("alpinejs"); require("./session"); // Your JavaScript code...
- 在
App\Providers\BroadcastServiceProvider文件的boot方法中,require包的频道文件,它包含私有频道认证
require base_path('vendor/quantical-solutions/session-out-modal-laravel/src/routes/channels.php');
- 在所有用户认证的地方调用
Quantic\SessionOut\Classes\AuthState::sessionAvailable()。如果您正在使用自定义登录逻辑,则在登录成功时将此行放在认证方法内部。
如果您正在使用Laravel的默认认证系统,则更好的选择是创建登录事件的监听器,例如:
// App\Providers\EventServiceProvider protected $listen = [ 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\SuccessfulLogin', ], ];
// App\Listeners\SuccessfulLogin use Quantic\SessionOut\Classes\AuthState; /** * Handle the event. * * @param Login $event * @return void */ public function handle(Login $user) { AuthState::sessionAvailable(); }
- 转到VerifyCsrfToken中间件文件,并将'/check-auth'添加到排除URI数组中
namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ '/check-auth', '/session', '/rebirth-session' ]; }
- 最后,取消注释并使用您的预设从.env文件填充resources/js/bootstrap.js中的Echo参数
window._ = require('lodash'); /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the * CSRF token as a header based on the value of the "XSRF" token cookie. */ window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** * Echo exposes an expressive API for subscribing to channels and listening * for events that are broadcast by Laravel. Echo and event broadcasting * allows your team to easily build robust real-time web applications. */ import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, forceTLS: true });
别忘了安装Echo & Pusher
npm install --save-dev laravel-echo pusher-js npm run dev
✔ 更新模态框设计及内容
模态框是用纯js和css创建的,没有使用任何框架,因此您可以通过编辑views/vendor/session-out/modal.blade.php轻松自定义模态框内容,并通过编辑public/vendor/session-out/css/session-modal.css自定义设计。
✔ 高级
- 🔘 如果要自定义负责检查认证会话和模态显示的
js文件,请修改resources/js/session.js
在ajax成功后,通过调用
closeSessionOutModal()函数关闭模态框
🧐📑 注意
♻ 更新包时
记得每次更新后发布 assets、views 和 config
更新包后使用 --force 标签发布最新的 更新 包 assets、views 和 config
但请记住,使用 --force 标签会替换所有可发布的文件
php artisan vendor:publish --provider="Quantic\SessionOut\SessionExpiredServiceProvider" --force php artisan vendor:publish --provider="Quantic\SessionOut\SessionExpiredServiceProvider" --tag=public --force
更新包时,请备份
config/expired-session.php文件和resources/js/session.js、views/vendor/session-out目录,因为这些目录中的文件是可以配置的。如果您修改了这些文件,则更新的已发布文件将不会包含更改,尽管在发布assets、views和config后,您仍然可以再次修改这些文件
🔧 修改完之后
在更改配置文件后,运行此 artisan 命令。
php artisan config:clear php artisan queue:restart // only when using broadcasting