quantical-solutions/session-out-modal-laravel

通过模态框通知用户会话已过期

1.0.0 2021-03-10 13:55 UTC

This package is auto-updated.

Last update: 2024-09-18 13:42:49 UTC


README

EPSI CIdevsrv / 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命令发布包含在包中的bladejscssconfig文件

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

  1. 为您的应用程序设置广播并启动usersession队列工作进程
php artisan queue:work --queue=default,usersession
  1. 请确保将广播客户端配置js文件放在@include行之后而不是下面,在您的blade视图中。
@include('vendor.session-out.notify')

别忘了在resources/js/app.js的最后添加require("./session")。

require("./bootstrap");
require("alpinejs");
require("./session");

// Your JavaScript code...
  1. App\Providers\BroadcastServiceProvider文件的boot方法中,require包的频道文件,它包含私有频道认证
require base_path('vendor/quantical-solutions/session-out-modal-laravel/src/routes/channels.php');
  1. 在所有用户认证的地方调用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();
}
  1. 转到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'
    ];
}
  1. 最后,取消注释并使用您的预设从.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

✔ 更新模态框设计及内容

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

✔ 高级

  • 🔘 如果要自定义负责检查认证会话和模态显示的 js 文件,请修改 resources/js/session.js

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

🧐📑 注意

♻ 更新包时

记得每次更新后发布 assetsviewsconfig

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

但请记住,使用 --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.jsviews/vendor/session-out 目录,因为这些目录中的文件是可以配置的。如果您修改了这些文件,则更新的已发布文件将不会包含更改,尽管在发布 assetsviewsconfig 后,您仍然可以再次修改这些文件

🔧 修改完之后

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

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