koa2-JWT登录验证、上传图片、上传视频

news2024/5/18 11:53:37

文章目录

  • 什么是JWT?怎么使用?
    • 后端进行token处理,传递给前端
    • Token的使用分成了两部分
    • 前端的处理处理token
    • 后端处理携带和不携带token的请求
  • 上传图片
    • 会持续更新
  • 上传视频
    • 会持续更新

在这里插入图片描述

什么是JWT?怎么使用?

JWT(JSON Web Token),本质就是一个字符串书写规范,如下图,作用是用来在用户和服务器之间传递安全可靠的信息

Koa 中间件,用于验证 JSON Web 令牌。

npm i koa-jwt -s

生成签名

npm i jsonwebtoken -s

后端进行token处理,传递给前端

// 生成token
            const token = jwt.sign(
                {
                    name: result.name
                },
                "test_token", // secret
                {expiresIn: 60 * 60} // 过期时间:60 * 60 s
            );
            return ctx.body = {
                code: "0",
                message: "登录成功",
                data: {
                    token
                }
            };

完整代码
数据库用户密码我采用的加密存储,可以看情况而定

const crypto = require("crypto"),
    jwt = require("jsonwebtoken");
const UserService = require('../service/user')

class UserController {
    // 用户登录
    static async login(ctx) {
        let data = JSON.parse(ctx.request.body)
        if (!data.name || !data.password) {
            return ctx.body = {
                code: "000002",
                message: "参数不合法"
            }
        }
        let temp = {
            name: data.name,
            password: crypto.createHash('md5').update(data.password).digest('hex')
        }
        let res = await UserService.findUser(temp)
        // res就是从数据库查询的结果
        let result = res.length ? true : false
        if (result) {
            // 生成token
            const token = jwt.sign(
                {
                    name: result.name
                },
                "test_token", // secret
                {expiresIn: 60 * 60} // 过期时间:60 * 60 s
            );
            return ctx.body = {
                code: "0",
                message: "登录成功",
                data: {
                    token
                }
            };
        } else {
            return ctx.body = {
                code: "000002",
                message: "用户名或密码错误"
            };
        }
    }

    // 用户退出登录
    static userOut(ctx) {
        ctx.body = {
            code:200,
            data:{
                msg:'退出登录成功'
            }
        }
    }

}

module.exports = UserController;

Token的使用分成了两部分

生成token:登录成功的时候,颁发token
验证token:访问某些资源或者接口时,验证token
生成 token
借助第三方库jsonwebtoken,通过jsonwebtoken 的 sign 方法生成一个 token:

第一个参数指的是 Payload

第二个是秘钥,服务端特有

第三个参数是 option,可以定义 token 过期时间

前端的处理处理token

在这里插入图片描述
然后存储起来
之后的请求,都会携带该token,也可以用postman存在环境中,也是挺好模拟的
在这里插入图片描述

后端处理携带和不携带token的请求

这里需要借用koa-jwt中间件,并添加白名单,就是不用携带token

const jwt = require('koa-jwt')
app.use(jwt({ secret: 'test_token' }).unless({path:'/user/login'}));

这个过程我写的比较简略,有错误欢迎指正

上传图片

会持续更新

上传视频

会持续更新

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

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

相关文章

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…

Revit中添加水平仰视平面图及水平剖面

一、 Revit中如何添加水平仰视平面图 在Revit平面视图中视角是俯视视角,但是在一些特殊的情况下,我们可能需要创建仰视视角的平面视图,例如我们需要向上看天花板的灯具布置的时候。 1.下面讲一下如何在添加仰视平面视图的方法。如图1在模型中…

STM32CubeMX+FATFS+FREERTOS实现W25Q256虚拟U盘

一、软件硬件说明软件:STM32CubeMX V6.6.1 /KEIL5 V5.29硬件:正点原子阿波罗开发板,核心板STM32F429IGT6(176脚)使用USB_SLAVE接口连接电脑USB,从而读取W25Q256里的文件W25Q256:SPI5接口二、STM32CubeMX配置RCC配置SYS…

Lecture3 梯度下降(Gradient Descent)

目录 1 问题背景 2 批量梯度下降 (Batch Gradient Descent) 3 鞍点(Saddle Point) 3 随机梯度下降 (Stochastic Gradient Descent) 4 小批量梯度下降 (Mini-batch Gradient Descent) 1 问题背景 图1 上节课讲述的穷举法求最优权重值在Lecture2中,介绍了使用穷举…

python+django校园在线拍卖系统pycharm项目源码

登录页和注册页 管理员、用户和拍卖者都可以在此页面登录到该系统 拍卖者注册的页面,拍卖者如果没有账号可以点击注册进入到系统 开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具&…

在国内有几个CCIE考点?

笔试在VUE指定思科考试中心报考加考试; 实验考试在国内只有北京和香港两个考点。还有一些其他考点,下面让我们一起来看一下。 CCIE笔试考点 思科ccie认证的笔试考试地点都在Vue考试中心,Vue考试中心是思科官方授权的考试地点,在国内大部分城市都有分布 CCIE笔试报…

基于ssm的航空售票系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经从做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xf…

c# 将数据导出到EXCEL文件

第一步:项目中加入引用。 在鼠标右击项目,点击【添加】弹出菜单列表,选择【项目引用】弹出【引用管理器】对话框,选择【COM】-【Microsoft Excel 16.0 Object Library】,如图所示: 第二步,编辑…

【项目精选】基于Java的敬老院管理系统的设计和实现

本系统主要是针对敬老院工作人员即管理员和员工设计的。敬老院管理系统 将IT技术为养老院提供一个接口便于管理信息,存储老人个人信息和其他信息,查找 和更新信息的养老院档案,节省了员工的劳动时间,大大降低了成本。 其主要功能包括: 系统管理员用户功能介绍&#…

体系结构概述

目录1.系统模型操作模式和状态寄存器和特殊寄存器2.存储器系统3.栈空间操作4.异常和中断5.嵌套向量中断控制器(NVIC)1.系统模型 操作模式和状态 Cortex-M0处理器包含两种操作模式和两种状态。 处理器在运行程序时处于Thumb状态,在这种状态…

个人信息保护认证

个人信息保护认证是证明个人信息处理者在认证范围内开展的个人信息收集、存储、使用、加工、传输、提供、公开、删除以及跨境等处理活动符合认证依据标准要求。适用范围 本规则依据《中华人民共和国认证认可条例》制定,规定了对个人信息处理者开展个人信息收集、存储…

【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

文章目录前言一、漏洞描述二、漏洞复现前言 本篇文章仅用于漏洞复现研究和学习,切勿从事非法攻击行为,切记! 一、漏洞描述 Phpstudy小皮面板存在RCE漏洞,通过分析和复现方式发现其实本质上是一个存储型XSS漏洞导致的RCE。通过系…

关于IB课程,你需要知道些什么?

1IB课程到底是什么? IB课程 IB课程是由国际文凭组织IBO(International Baccalaureate Organization)开设的、针对3-19岁学生的、从幼儿园到大学预科的课程,服务对象为全球3-19岁的学生。IBO历史 1968年IBO组织在瑞士日内瓦成立&am…

php mysql保健品购物商城系统

目 录 1 绪论 1 1.1 开发背景 1 1.2 研究的目的和意义 1 1.3 研究现状 2 2 开发技术介绍 2 2.1 B/S体系结构 2 2.2 PHP技术 3 2.3 MYSQL数据库 4 2.4 Apache 服务器 5 2.5 WAMP 5 2.6 系统对软硬件要求 6 …

2.计算机基础-计算机网络面试题—基础知识、容器、面向对象、并发编程

本文目录如下:计算机基础-计算机网络 面试题一、基础知识简述 TCP 和 UDP 的区别?http与https的区别?Session 和 Cookie 有什么区别?URL是什么?由哪些部分组成?OSI 的 五层模型 都有哪些?get 和 post 请求…

CIAM 如何平衡数据安全与客户体验?| 身份云研究院

普华永道研究表明,32% 的用户会因为一次体验不佳而放弃使用一个产品。无独有偶,据数据分析公司 Preact 研究显示,首次注册、登录或验证是最主要的用户流失环节,占整体流失率的 22.9%。 对于任何在网上做生意的公司来说&#xff0…

MySQL为什么要改进LRU算法?

普通LRU算法 LRU算法介绍 LRU Least Recently Used(最近最少使用):也就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰数据。 1.当要访问某个页时,如果不在Buffer Pool中,需要把该…

java实现电子发票中的发票税号等信息识别的几种可用方案

先说一下背景:今天领导突然说需要做一个电子发票中发票税号的识别,于是乎就开始去调研看有哪些方案,最先想到的就是OCR文字识别,自己去画框训练模型去识别税号等相关信息话不多说开整思路:思路一:百度AI平台…

逻辑仿真工具VCS的使用-Makefile

Gvim写RTL code,VCS仿真,Verdi看波形,DC做综合下约束,Primetime做STA,Spyglass做异步时序分析。 VCS全称Verilog Computer Simulation ,VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿…

C进阶:预处理

🤖本篇文章主要讲解预处理的知识,即使你是小白也可以看的懂,若你对预处理有所不解,确定不来看看吗?😿 目录 一.代码运行是的两种环境 二.翻译环境 三.预定义符号 四.#define 1.define 定义宏 2.带有…