当前位置: 首页 > article >正文

群控系统服务端开发模式-应用开发-前端退出功能

        我们从未登录一直到退出,现在已经登录到操作,现在完成退出。退出有两种情况下会退出:第一种情况下是手动点击退出按钮,第二种情况下是登录过期时间到了自动退出的。

一、手动退出

        因退出及个人信息页面都在公有页面,所以存放的位置不同。具体位置在根目录下src文件夹下layout文件夹下components文件夹下Navbar.vue文件中。

        1、修改退出按钮字样

<el-dropdown-item divided @click.native="logout">
    <span style="display:block;">退出</span>
</el-dropdown-item>

        2、修改退出方法

        在根目录下src文件夹下store文件夹下modules文件夹下user.js文件中,修改logout方法,代码如下

logout({ commit, state, dispatch }) {
    return new Promise((resolve, reject) => {
        logout().then(res => {
            if (res.code === 50034) {
                reject(res.message)
            } else if (res.code === 50000) {
                warn(res.message)
            } else {
                succ(res.message)
                commit('SET_TOKEN', '')
                commit('SET_BUTTS', [])
                commit('SET_ROLES', [])
                commit('SET_USERNAME', '')
                commit('SET_AVATAR', '')
                commit('SET_EMAIL', '')
                commit('SET_REALNAME', '')
                commit('SET_DEPARTMENT_TITLE', '')
                commit('SET_GRADE_TITLE', '')
                commit('SET_ROLENAME', '')
                removeToken()
                resetRouter()
                dispatch('tagsView/delAllViews', null, { root: true })
                resolve()
            }
        }).catch(error => {
            reject(error)
        })
    })
},

二、自动退出

        1、工作原理

                因我们的token存在Redis中,而Redis有一个键自动过期回调方法,只要采用thinkphp6的命令工具就行检测到,然后清理服务器上过期登录者数据状态即可。如果不做此操作,只是影响登录者的token记录真实退出时间而已。

        2、创建监听过期时间命令

                在根目录下config文件夹下console.php文件中,添加如下命令

<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
    // 指令定义
    'commands' => [
        'redisClusterControlApiExpireToken' => 'app\command\ExpireToken',
    ],
];

        3、创建监听过期时间方法

                在根目录下app文件夹下创建command文件夹,然后在command文件夹下创建ExpireToken命令控制方法,具体代码如下

<?php
/**
 * 过期清理token命令
 * User: 龙哥·三年风水
 * Date: 2024/11/13
 * Time: 10:15
 */
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;

class ExpireToken extends Command
{
    protected function configure(){
        // 指令配置
        $this->setName('redisClusterControlApiExpireToken')->setDescription('the redisClusterControlApiExpireToken command');
    }

    protected function execute(Input $input, Output $output){
        $redis = new \Redis();
        $redis->connect('172.20.36.144',6379);
        $redis->auth('QXtr@@PxjoLenGon');
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        $redis->psubscribe(array("__keyevent@126__:expired"), function ($redis, $pattern, $channel, $msg){
            $res = explode('_', $msg);
            if(count($res) == 2){
                if(!is_numeric($res[1])){
                    $expireTime = time();
                    $dbconnect = new \PDO("mysql:host=172.20.36.143;dbname=cluster_control", 'cluster_control', '7%Qh3ar@TiA5Rt#gNPT');
                    $sqlTokenUpdate = "Update nc_permission_token SET expire_time = {$expireTime} WHERE token = '{$res[1]}'";
                    $dbconnect->exec($sqlTokenUpdate);
                }
            }
        });
    }
}

三、提前说明

        其实,在总控制base里面的token里面也可以做这个事情,但是这样不是很好。这样的想法也是需要通过前端去刷新页面才得来的结果。


http://www.kler.cn/a/393448.html

相关文章:

  • 2024年11月12日Github流行趋势
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • 数字孪生在智慧能源项目中的关键作用,你了解多少?
  • Rust 所有权机制
  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • 94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13
  • 丹摩征文活动|FLUX.1 和 ComfyUI:从部署到上手,轻松驾驭!
  • apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义
  • CyclicBarrier复杂场景示例
  • ThinkServer SR658H V2服务器BMC做raid与装系统
  • TCP 为什么是流协议而不是包协议
  • SpringBoot框架在共享汽车管理中的应用
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • 基于SpringBoot智慧社区管理平台
  • 力扣(LeetCode)LCR 179. 查找总价格为目标值的两个商品(Java)
  • Fabric.js中文教程
  • 唐帕科技校园语音报警系统:通过关键词识别,阻止校园霸凌事件
  • 网络基础 - 网段划分篇
  • 嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻
  • CHI 协议层 Retry —— CHI(8)
  • 安科瑞工业绝缘监测装置:保障煤矿井下6kV供电系统安全运行的关键应用——安科瑞 丁佳雯
  • Java使用Thumbnails进行图片处理
  • 《C++跨平台编译:打破系统边界,释放代码潜能》
  • pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named ‘XXX‘异常的解决办法
  • YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊