❤Node09-用户信息token认证

news/2024/9/22 2:18:10/

❤Node09-用户信息token认证​

1、安装​

jsonwebtoken

比较官方的称呼为JSON Web Token(JWT),一种开放标准(RFC 7519),就类似砸门认知的w3c,主要就是更安全地传输信息。利用数字签名验证数据的完整性和身份。

所以JWT 通常用于验证身份和安全的交换信息,是一种轻量级、安全且可扩展的身份验证机制,大概被分为以下几种:

  1. 用户身份验证:用户登录后,服务器生成一个 JWT 返回给客户端,客户端在请求中携带该 JWT,服务器通过验证 JWT 的签名来确认用户的身份。(就是咋们网站必须登录才能访问某个网页)
  2. 信息交换:在微服务架构中传输一些需要身份验证和授权的安全和完整信息。
  3. 声明传输:JWT 中包含一些声明(claim),例如可以安全传输和验证用户的身份信息、权限等,不需要在每次请求中查询数据库
  4. 单点登录:JWT 可以被用来实现单点登录(SSO),用户只需要登录一次,就可以访问多个关联的系统。

express

用于构建 Rest API 帮助前后端实现通讯

express模块 用于构建 Rest API 帮助前后端通讯API和Web应用程序的一个轻量级的Node.js框架,换句话说,我们想要在后端创造接口让前端去访问,就需要用到它。

简化了在Node.js上构建Web应用程序的过程,提供了路由、中间件、模板引擎等功能,简单方便还丰富!

Express的主要作用包括:

1、路由:允许我们定义和处理各种HTTP请求方法(GET、POST、PUT、DELETE等。根据不同的URL路径和HTTP请求方法定义处理函数,实现请求的路由分发。
2、中间件:允许我们在处理HTTP请求之前或之后自定义操作。中间件可以处理身份验证、日志记录、错误处理等。
3、模板引擎:Express支持EJS、Pug等,使我们将动态内容嵌入到静态页面中。实现页面的动态渲染。
4、 静态文件服务: 提供静态文件的服务,例如图片、CSS、JavaScript文件等。将静态文件存储在指定的目录中,进行访问和加载。
5、 RESTful API支持: 借助路由和中间件构建RESTful API,实现对数据的CRUD操作,构建API服务。

安装jsonwebtoken和express-jwt第三方包​

javascript

yarn add jsonwebtoken express-jwt --save

2、创建一个基本的服务器

javascript

//导入express
const express = require('express')//创建服务器对象
const app = express()//启动服务器
app.listen(8888,function(){console.log('express server running at http://127.0.0.1:8888')
})

3、导入 jsonwebtoken 和 express-jwt 第三方包​

javascript

//身份认证部分包
import jwt from 'jsonwebtoken' // 1.导入jsonwebtoken生成 jwt 字符串的包
import expressJWT  from 'express-jwt' // 2.导入将客户端发送过来的 JWT 字符串,解析还原成 JSON 对象的包

4、创建一个密钥​

javascript

const secretKey = 'aflowerdemon is No1 ^_^' //密钥里边的字符可以自定义

注册将客户端发送过来的 jwt 字符串,解析还原成 JSON 对象的中间件 express-jwt
注意:

plain

1.这边将jwt字符串解析出来的信息会被挂载到req.user属性上,可以通过req.user属性获取到信息。2.下边的unless({path[]})中是不需要 token访问权限的路径。3. 这边注意一下,你的登录请求路径,放一定在unless({path[]})中,让它无需token权限,否则你会一直请求失败(这个坑我踩过)如下边代码所示:

5、定义接口认证和接口白名单​

path之中是不需要进行token认证的接口

javascript

// token认证
app.use(expressJWT.expressjwt({ secret: secretKey, algorithms: ["HS256"] }).unless({// path: [/^\/api\//],path: ['/','/api/login','/api/register','/api/resetPwd']})
);

接下来我们尝试访问用户接口,这个时候我们看到给我们一个提示:

js

UnauthorizedError: No authorization token was found

告诉我们没有授权访问信息

js

nauthorizedError
No authorization token was found

我们简单写一个白名单中的登录接口如下:

javascript

// 用户登录接口
app.post('/api/login', (req, res) => {let query = 'SELECT * FROM user';connectionpool.query(query, (err, results) => {console.log(err,'err');console.log(results,'results');if (err) {console.error('Error querying database:', err);res.status(500).json({ error: 'Internal server error' });return;}res.json({code: '200',data: results ? results[0] : {},});});
});

访问一下试试,返回的结果如下图所示:可以看出我们的接口可以正常访问

js

{"code": "200","address": "地址","age": "188","data": {"id": 1,"name": "管理员","age": "188","sex": 1,"createtime": "2024-04-12T09:53:27.000Z","phone": "xxxxxx","state": "1"}
}
// ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/318f5486bed14e15b9547fc59bf9d1a5~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1058&h=270&s=20606&e=png&b=ffffff)

不在白名单的接口是无法进行访问的,访问就是未授权!


http://www.ppmy.cn/news/1528651.html

相关文章

windows安装docker、elasticsearch、kibana、cerebro、logstash

文章目录 1. 安装docker1.1. 两大要点1.1.1. 安装启用hyper-v电脑不存在hyper-v的情况 1.1.2. 下载安装docker 2. 在docker里面安装elasticSearch,kibana,cerebro3. 安装logstash-将数据导入到elasticSearch3.1 安装logstash3.1.1 注意事项3.1.1.1. 等了…

基于Prometheus和Grafana的现代服务器监控体系构建

引言 随着云计算、微服务架构和容器化技术的普及,服务器的监控需求变得越来越复杂。现代企业不仅需要监控传统的物理服务器和虚拟机,还需要实时监控动态环境中的容器、微服务和分布式系统。针对这种复杂的IT环境,传统的监控工具往往不再适用&…

掌握 JavaScript 中的函数表达式

函数表达式是 javascript 中定义函数的一种方式。与函数声明不同,函数表达式可以是匿名的,并且通常用于将函数视为值的情况。在本文中,我们将探讨函数表达式、如何将函数视为值、回调函数以及函数表达式和函数声明之间的差异。 函数表达式 …

STS相关的英文缩写

3DES Triple DES (see also DES); Data Encryption Standard applied 3 times 应用3次数据加密 标准AES Advanced Encryption Standard 高级机密标准AMR Automatic Meter Reading 自动抄表APDU Application Protocol Data Unit 应用协议数据单元ASN Abstract Syntax Notation 抽…

JVM 调优篇7 调优案例4- 线程溢出

一 线程溢出 1.1 报错信息 每个 Java 线程都需要占用一定的内存空间,当 JVM 向底层操作系统请求创建一个新的 native 线程时,如果没有足够的资源分配就会报此类错误。报错信息:java.lang.outofmemoryError:unable to create new Native Thr…

开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界-集成vLLM(二)

一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图像和视频理解能力,以及多语言支…

解决mybatis plus 中 FastjsonTypeHandler无法正确反序列化List类型的问题

由于是根据自动映射类型,我们设置的字段类型是List 也就是反序列化的时候也只是用 FastjsonTypeHandler中的 Override protected Object parse(String json) { return JSON.parseObject(json, type); } 反序列化方法,这是type为List 反序列后我们并没…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…