❤Node09-用户信息token认证

❤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.xdnf.cn/news/146229.html

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

相关文章

Vue使用代理方式解决跨域问题

1、解决跨域问题 如果 Vue 前端应用请求后端 API 服务器,出现跨域问题(CORS),如下图: 解决方法:在 Vue 项目中,打开 vue.config.js 配置文件,在配置文件中使用代理解决跨域问题。 …

腾讯云ssl证书到期,续期免费证书并部署

首先咱用的免费证书,现在最长90天有效期,今天又到期了,得及时续期避免关联资源访问受限。 我这个证书是关联了一个负载均衡和两个容器服务的(如果您的应用是ngnix或其他的应用那和本文操作可能有点不一样) 所以需要做…

SpringCloud (1) 服务拆解

1 服务拆解和治理 1.1 服务拆解 微服务的核心就是服务拆分,将传统的大项目拆分为多个微型服务(服务或微服务),实现服务之间"高内聚(微服务职责单一),低耦合(微服务功能相对独立)"的目的 (1) 水平(横向)拆分:先搭出拆分框架,比如【公共服务】(比如:common服务,client…

Redis作为单线程模型,为什么效率高、速度快呢?

前言: 效率高、速度快是相较于数据库来说的(MySQL、Orcale、SQL server) 文章目录 一、单线程模式的工作流程二、为什么快? 一、单线程模式的工作流程 这里我们所说的单线程是指:Redis只使用一个线程,来处…

从零到一:打造安全高效敦煌测评自养号体系

敦煌测评自养号是一种提升店铺销售和排名的有效策略,卖家可以自行注册并管理买家账号,通过模拟真实买家行为为自家店铺进行测评和补单。以下是一些关键技巧,帮助卖家快速提升销售和排名: 一、账号注册与养号 环境搭建&#xff1…

prober found high clock drift,Linux服务器时间不能自动同步,导致服务器时间漂移解决办法。

文章目录 一、场景二、问题三、解决办法(一)给服务器添加访问网络能力(二)手动同步1. 检查有没有安装ntp2. 没有安装ntp则离线安装ntp2.1 下载安装包2.2 安装2.3 启动 ntp 3. 设置内部时钟源3.1 编辑/etc/ntp.conf3.1 重启ntp服务…

【vmware】vmware中手动安装vmwaretools

问题: vmware中点击安装vmwaretools时出现如下: VMware Tools 不再随旧版客户机操作系统的 VMware Workstation 一起提供。 请从 https://packages-prod.broadcom.com/tools/frozen/windows/winPreVista.iso 下载,并参阅 https://knowledge.broadcom.co…

海外大带宽服务器连接失败怎么办?

在全球化日益加深的今天,海外大带宽服务器已成为企业拓展国际市场、提升业务效率的重要工具。然而,面对复杂多变的网络环境和技术挑战,服务器连接失败的问题时有发生,这不仅影响了企业的正常运营,还可能带来经济损失和…

VM虚拟机使用的镜像文件下载

文章目录 Windows系统进入微软官网下载工具以Windows10为例下载镜像文件 Windows系统 进入微软官网下载工具 微软中国官网:https://www.microsoft.com/zh-cn/ 以Windows10为例下载镜像文件 选择下载的路径 开始下载 安装windows10操作系统出现Time out问题及解决办…

WPF DataGrid 动态修改某一个单元格的样式

WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…

得物自建 Redis 无人值守资源均衡调度设计与实现

目录&#xff1a; 一、为什么要做资源均衡调度 二、为什么要做自动化资源均衡调度 三、如何合理选择迁移节点 四、如何保障迁移过程中可靠性1. 添加从节点2. 检查同步数据正常3. 执行主从切换4. 检查主从切换正常5. 删除待迁移节点6. 消息通知 五、迁移任务管理展示 六、总结 …

酸枣病虫害智能化防控系统的探索与实践,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统

智慧农业&#xff0c;作为现代农业的高级形态&#xff0c;通过集成物联网、大数据、人工智能等先进技术&#xff0c;实现了农业生产过程的精准化、智能化管理。在酸枣等经济作物的种植过程中&#xff0c;病虫害的及时监测与防控直接关系到作物的产量与质量&#xff0c;进而影响…

LD3320语音识别模块的简单应用

文章目录 一、 前言二、硬件1.原理图2.产品参数 三、软件1.语音识别原理2.用户使用模式2.1 触发识别模式2.2 循环识别模式 3.语音识别程序3.1 并行方式读写3.2 初始化3.3 写入识别列表3.4 开始识别3.5 响应中断 4.烧写程序4.1 硬件连接4.2 打开STC-ISP软件4.3 按要求配置软件4.…

F28335中断系统

1 中断介绍 1.1 中断概念 1.2 TMS320F28335 中断概述

Python 中的 typing 模块常见用法

typing 模块是 Python 提供的一个标准库&#xff0c;主要用于为函数、变量和类定义类型提示&#xff08;Type Hints&#xff09;&#xff0c;从而提高代码的可读性和类型安全性。虽然 Python 是动态类型语言&#xff0c;但通过 typing 模块&#xff0c;开发者可以明确指定变量和…

【Git 操作】Git 的基本操作

文章目录 1. Git 的配置2. 工作区、暂存区、版本库 1. Git 的配置 &#x1f427;①首先要新建一个目录&#xff0c;该目录用于放项目代码&#xff0c;在该目录下执行git init命令&#xff0c;用于创建一个 Git的本地仓库。 .git ⽬录是 Git 来跟踪管理仓库的。&#x1f427;②…

【script】java武魂技展示:在java中使用不同的脚本语言 一文体现java生态的强大

我们经常听到java强大在于它的生态&#xff0c;对于生态的理解我们一般可能想到的是spring家族、微服务那一套中间件&#xff1b;其实java生态的强大也体现在它能使用各种脚本语言&#xff0c;博主最近在项目中考虑使用脚本语言以达到动态效果&#xff0c;因此顺带例举了常用的…

prometheus通过nginx-vts-exporter监控nginx

Prometheus监控nginx有两种方式。 一种是通过nginx-exporter监控&#xff0c;需要开启nginx_stub_status,主要是nginx自身的status信息&#xff0c;metrics数据相对较少&#xff1b; 另一种是使用nginx-vts-exporter监控&#xff0c;但是需要在编译nginx的时候添加nginx-module…

Vuex 入门与实战

引言 Vuex 是 Vue.js 官方推荐的状态管理库&#xff0c;它可以帮助我们更好地管理 Vue 应用的状态。在大型应用中&#xff0c;组件之间的状态共享和通信是一个非常重要的问题&#xff0c;而 Vuex 提供了一种优雅的解决方案。 在 Vue 应用中&#xff0c;数据的流动一般是单向的…

Android Perfetto 学习

1、如何抓取性能日志 方式1、通过手机里的System Tracing抓取 1、点击Settings->System->Developer options->System Tracing->Record trace 打开 2、操作完成后&#xff0c;点击Settings->System->Developer options->System Tracing->Record trace…