自学内容网 自学内容网

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

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

一、手动退出

        因退出及个人信息页面都在公有页面,所以存放的位置不同。具体位置在根目录下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里面也可以做这个事情,但是这样不是很好。这样的想法也是需要通过前端去刷新页面才得来的结果。


原文地址:https://blog.csdn.net/m0_63603104/article/details/143730099

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!