devsrv / laravel-session-out

此包已被废弃且不再维护。未建议替代包。

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

v1.2.0 2018-11-02 19:20 UTC

This package is auto-updated.

Last update: 2023-03-29 00:27:01 UTC


README

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

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

认证会话已不可用,要继续当前活动(可能是在发布未保存的帖子等过程中),建议您重新登录

用户登录后立即隐藏消息正是本包的功能。

📥 安装

您可以通过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命令发布包含在包中的bladejscssconfig文件:

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以获得更快的输出,请按照以下步骤操作**

  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/devsrv/laravel-session-out/src/routes/channels.php');
  1. 在所有用户认证的地方调用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();
}

✔ 更新模态设计及内容

该模态框使用纯 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="devsrv\sessionout\sessionExpiredServiceProvider" --force

php artisan vendor:publish --provider="devsrv\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)。有关更多信息,请参阅 许可证文件