egg+vue实现登录功能【解决vue中登录的潜在问题】

news2024/11/26 22:24:04

前后端登录功能实现

  • 前言
  • 一、cookie和session
  • 二、代码呈现
    • 1.egg部门代码
    • 2.vue代码
  • 过程


前言

记忆在时间面前总是不堪一击!


本人的记录,下面内容仅供参考,如有什么什么,请自行解决。

一、cookie和session

不多赘述,详情请看 - https://www.eggjs.org/zh-CN/core/cookie-and-session

二、代码呈现

1.egg部门代码

// 登录
async login(data) {
    const { ctx, app } = this;
    try {
        if (ctx.session.data) {
            return this.success({ message: '请退出登录!' })
        }
        let user = await ctx.model.User.findOne({
            where: {
                userName: {
                    [Op.eq]: data.userName
                },
                password: {
                    [Op.eq]: utility.md5(data.password)
                },
                delete:{
                    [Op.eq]:0
                }
            }
        });
        if (user && user.password === utility.md5(data.password)) {
            // 密码正确,将通过jwt插件生成token,返回给前端
            const token = app.jwt.sign(
                { userName: data.userName },
                app.config.jwt.secret,
                {
                    expiresIn: "5h",// token的有效期,根据情况设置即可
                }
            );
            ctx.cookies.set('token', token)
            delete user.dataValues.password
            let roleId = user.dataValues.roleId;
            let roleInfo = await this.roleID(roleId)
            ctx.session.data = {
                userName: user.dataValues.userName,
                roleName: user.dataValues.roleName,
                administrator: user.dataValues.administrator,
                roleInfo: {
                    roleName: roleInfo[0].dataValues.roleName,
                    dataAuthority: roleInfo[0].dataValues.dataAuthority,
                },
            }
            return this.ctx.body = {
                data: { userInfo: user.dataValues, roleInfo: roleInfo[0].dataValues, token },
                message: "登陆成功!",
                code: 200,
            };
        } else {
            return this.ctx.body = {
                message: "登陆账号或密码错误!",
                code: 200,
            }
        }
    } catch (error) {
        return error.message;
    }
}
// 退出登录
async logOut() {
    const { ctx } = this
    try {
        const token = ctx.cookies.get('token', {
            maxAge: -1,
        });
        if (!ctx.session.data && !token) {
            return ctx.body={'已经登录'}
        }
        if (token) {
            ctx.cookies.set('token', '')
        }
        ctx.session.data = null;
        return ctx.body={'退出登录'}
    } catch (error) {
        return error.message
    }
}

2.vue代码

<script>
// npm i vue-cookie -S
import Cookies from 'vue-cookie'
export default {
  name: "App",
  data() {
    return {
    };
  },
  mounted() {
    window.onload = function() {
      if (!window.sessionStorage["ISlogin"]) {
        Cookies.delete("token");
        Cookies.delete("token.sig");
        Cookies.delete("EGG_SESS");
        location.reload(); //不能省,强制跳到登陆页
      } else {
        window.sessionStorage.removeItem("ISlogin");
      }
    };
    window.onunload = function() {
      window.sessionStorage["ISlogin"] = true;
    };
    window.onbeforeunload = function() {
      window.sessionStorage["ISlogin"] = true;
    };
  },
};
</script>

过程

以上代码为egg的实现,其实登录都可以了,但是在浏览器测试登录的时候,有一个问题就是退出登录之后cookie还是存在的,应该在首页的,可是打开项目还是在登录页,于是乎,那就想关闭标签或者关闭浏览器清除cookie ,那就在APP.vue中加入以下代码。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据Hadoop教程-学习笔记03【Hadoop MapReduce与Hadoop YARN】

视频教程&#xff1a;哔哩哔哩网站&#xff1a;黑马大数据Hadoop入门视频教程教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大数据Hadoop教程-学习笔记02【…

风险的定义以及CAPM 和 APT

文章目录风险定义&#xff1a;CAPMAPT&#xff08;Arbitrage Pricing Theory&#xff09;套利定价模型风险定义&#xff1a; 投资组合的收益率等于组合中各资产收益率的加权平均&#xff0c;但是投资组合的标准差并不等于组合中各资产标准差的加权平均&#xff0c;而是小于等于…

Git 详细教程

目录1.简介&#xff1a;2.安装Git3.Git 如何工作状态区域4.使用Git5.Git配置5.1 创建仓库 - repository5.2 配置5.2.1 --global5.2.2 检查配置6. 查看工作区的文件状态6.1什么是工作区6.2 如果显示乱码的解决方式7.在工作区添加单个文件8. 添加工作区文件到暂存区9. 创建版本10…

数据结构与算法(二)(Python版)

数据结构与算法&#xff08;一&#xff09;&#xff08;Python版&#xff09; 文章目录递归动规初识递归&#xff1a;数列求和递归三定律递归的应用&#xff1a;任意进制转换递归的应用&#xff1a;斐波那契数列递归调用的实现分治策略与递归优化问题和贪心策略找零兑换问题贪心…

RocketMQ-基本概念

主题&#xff08;Topic&#xff09; Apache RocketMQ 中消息传输和存储的顶层容器&#xff0c;用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。 主题的作用主要如下&#xff1a; 定义数据的分类隔离&#xff1a; 在 Apache RocketMQ 的方案设计中&…

挚文集团短期内不适合投资,长期内看好

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 挚文集团&#xff08;MOMO&#xff09;在新闻稿中称自己是“中国在线社交和娱乐领域的领军企业”。 该公司旗下的陌陌是中国“陌生人社交网络”移动应用类别的领导者&#xff0c;并在2022年9月拥有超过1亿的月活跃用户。探…

Eotalk Vol.03:结合 API DaaS,让使用数据更方便

Eotalk 是由 Eolink CEO 刘昊臻发起的泛技术聊天活动&#xff0c;每期都会邀请一些技术圈内的大牛聊聊天&#xff0c;聊些关于技术、创业工作、投融资等热点话题。 Eotalk 的第 3 期&#xff0c;很高兴邀请到 Tapdata CEO TJ 唐建法&#xff0c;TJ 可以说是一位超级大咖&#x…

ESP32-C3 BLE5.0 扩展蓝牙名称长度的流程

蓝牙设备名称长度受限于蓝牙广播数据包的长度&#xff0c;如果广播数据包的长度不能包含完整的设备名称&#xff0c;则只显示短名称&#xff0c;其余不能容纳的部分将被截断。ESP32-C3 支持 BLE5.0&#xff0c;最大广播包长支持 1650 字节&#xff0c;可通过 esp_ble_gap_confi…

Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】

目录 一、概述 二、SecureCRT的下载、安装 三、SecureCRT的使用  &#x1f449;3.1 使用SSH协议连接Linux开发主机  &#x1f449;3.2 使用Serial(串口)协议连接嵌入式开发板  &#x1f449;3.3 使用Telnet协议连接嵌入式开发板 四、SecureCRT配置会话选项  &#x1f3a8;4…

将Nginx 核心知识点扒了个底朝天(九)

Nginx 如何实现后端服务的健康检查&#xff1f; 方式一&#xff0c;利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。 方式二(推荐)&#xff0c;利用 nginx_upstream_check_module 模块对后端节点做健康检查。 Nginx 如何开启…

Homekit智能家居DIY一智能通断开关

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…

SQL零基础入门学习(五)

SQL零基础入门学习&#xff08;五&#xff09; SQL零基础入门学习&#xff08;四&#xff09; SQL SELECT TOP, LIMIT, ROWNUM 子句 ####SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非…

如何使用DevEco Studio创建Native C++应用

简介本篇主要介绍如何使用DevEco Studio for OpenAtom OpenHarmony &#xff08;以下简称“OpenHarmony”&#xff09;创建一个Native C应用。应用采用“Native C”模板&#xff0c;实现了通过Node-API调用C标准库的功能。本示例通过调用C标准库接口来演示调用过程&#xff0c;…

【macos游戏】RimWorld人工智能说书人控制的科幻殖民地模拟器

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。由人工智能说书人控制的科幻殖民地模拟器。RimWorld控制了一艘太空客轮坠毁的三名幸存者&#xff0c;该飞船在所探索的空间边缘建造了一个殖民地。这款游戏的灵感来源是萤火虫太空西部的精神、对矮人堡垒的深入研究以及史诗…

Python数值方法及数据可视化

随机数和蒙特卡洛模拟求解单一变量非线性方程求解线性系统方程函数的数学积分常微分方程的数值解 等势线绘图和曲线&#xff1a; 等势线 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dx_vals np.linspace(-5,5,20) y_vals …

我们接下来来讲解一下spring的spi机制

大家这俩可能会想到说spring的spi的应用场景&#xff0c;别着急我们慢慢来说&#xff0c;首先来说一个我们熟知的SpringBoot的自动装配是如何实现的&#xff1f;基本上&#xff0c;你一说是基于spring的SPI扩展机制&#xff0c;再把spring.factories文件和EnableAutoConfigurat…

Mysql——主从复制与读写分离

1.什么是主从复制 主从复制&#xff1a;是一种数据备份的方案。 一般来说&#xff0c;是使用两个或两个以上相同的数据库&#xff0c;将一个数据库当做主数据库&#xff0c;另一个数据库当做从数据库。在主数据库中进行相应操作时&#xff0c;从数据库记录下所有主数据库的操…

Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount

目录 一、分桶抽样 1.抽取表中10%的数据 2.抽取表中30%的数据 3.取第一行 4.取第10行 5.数据块抽样 6.tablesample详解 二、UDTF——表生成函数 1.explode()——炸裂函数 2.posexpolde()——只能对array进行炸裂 3.inline()——炸裂结构体数组 三、UDTF与侧视图的搭…

【持续学习】清华最新持续学习综述

为了应对现实世界的动态变化&#xff0c;智能体需要在其生命周期中增量地获取、更新、积累和利用知识。这种能力被称为持续学习&#xff0c;为人工智能系统自适应发展提供了基础。本文来自于https://arxiv.org/abs/2302.00487在一般意义上&#xff0c;持续学习明显受到灾难性遗…

DO-254 和 DO-178B的区别(文末有易灵思核心板及配套下载线)

DO-178B介绍 DO-178B&#xff0c;机载系统和设备认证中的软件考虑&#xff0c;在电子硬件被要求符合 DO-254 之前多年就已发布和采纳。DO-178B 的先行一步对电子硬件开发带来两个特别的后果。首先&#xff0c;使得硬件制造商有了一种倾向&#xff0c;为了避免 DO-178B 对软件开…