当前位置: 首页 > news >正文

wordpress 位置定位/黄山网站seo

wordpress 位置定位,黄山网站seo,微信出售平台,如何建设一个好的网站Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …

Node.js JWT认证教程

1. 项目介绍

JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。

2. 项目准备

2.1 初始化项目

# 创建项目目录
mkdir nodejs-jwt-auth
cd nodejs-jwt-auth# 初始化项目
npm init -y# 安装依赖
npm install express jsonwebtoken bcryptjs body-parser

2.2 项目依赖说明

  • express: Web应用框架
  • jsonwebtoken: JWT生成与验证
  • bcryptjs: 密码加密
  • body-parser: 解析请求体

3. 项目结构

nodejs-jwt-auth/
│
├── config/
│   └── database.js
├── models/
│   └── user.js
├── middleware/
│   └── auth.js
├── routes/
│   └── auth.js
├── server.js
└── package.json

4. 详细实现

4.1 数据库配置 (config/database.js)

module.exports = {secret: 'your_jwt_secret_key',database: 'mongodb://localhost:27017/jwt-auth-demo'
};

4.2 用户模型 (models/user.js)

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');const UserSchema = new mongoose.Schema({username: {type: String,required: true,unique: true},password: {type: String,required: true}
});// 密码加密中间件
UserSchema.pre('save', function(next) {if (!this.isModified('password')) return next();bcrypt.genSalt(10, (err, salt) => {if (err) return next(err);bcrypt.hash(this.password, salt, (err, hash) => {if (err) return next(err);this.password = hash;next();});});
});// 密码验证方法
UserSchema.methods.comparePassword = function(candidatePassword) {return bcrypt.compareSync(candidatePassword, this.password);
};module.exports = mongoose.model('User', UserSchema);

4.3 认证中间件 (middleware/auth.js)

const jwt = require('jsonwebtoken');
const config = require('../config/database');module.exports = (req, res, next) => {const token = req.headers['authorization'];if (!token) {return res.status(403).json({ success: false, message: '未提供认证Token' });}jwt.verify(token, config.secret, (err, decoded) => {if (err) {return res.status(401).json({ success: false, message: 'Token无效' });}req.userId = decoded.id;next();});
};

4.4 路由 (routes/auth.js)

const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();
const User = require('../models/user');
const config = require('../config/database');
const authMiddleware = require('../middleware/auth');// 用户注册
router.post('/register', async (req, res) => {try {const { username, password } = req.body;const existingUser = await User.findOne({ username });if (existingUser) {return res.status(400).json({ success: false, message: '用户已存在' });}const user = new User({ username, password });await user.save();res.status(201).json({ success: true, message: '注册成功' });} catch (error) {res.status(500).json({ success: false, message: '服务器错误' });}
});// 用户登录
router.post('/login', async (req, res) => {try {const { username, password } = req.body;const user = await User.findOne({ username });if (!user) {return res.status(401).json({ success: false, message: '用户不存在' });}const isMatch = user.comparePassword(password);if (!isMatch) {return res.status(401).json({ success: false, message: '密码错误' });}const token = jwt.sign({ id: user._id }, config.secret, { expiresIn: '24h' });res.json({ success: true, token: `Bearer ${token}` });} catch (error) {res.status(500).json({ success: false, message: '服务器错误' });}
});// 受保护的路由
router.get('/profile', authMiddleware, async (req, res) => {try {const user = await User.findById(req.userId).select('-password');res.json({ success: true, user });} catch (error) {res.status(500).json({ success: false, message: '服务器错误' });}
});module.exports = router;

4.5 服务器入口 (server.js)

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const config = require('./config/database');
const authRoutes = require('./routes/auth');const app = express();// 数据库连接
mongoose.connect(config.database, {useNewUrlParser: true,useUnifiedTopology: true
});// 中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));// 路由
app.use('/api/auth', authRoutes);const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {console.log(`服务器运行在 ${PORT} 端口`);
});

5. 使用说明

5.1 注册用户

POST /api/auth/register
{"username": "testuser","password": "123456"
}

5.2 用户登录

POST /api/auth/login
{"username": "testuser","password": "123456"
}

5.3 访问受保护路由

GET /api/auth/profile
Authorization: Bearer <token>

6. 安全建议

  1. 使用HTTPS保护传输
  2. 定期更新JWT密钥
  3. 设置合理的Token过期时间
  4. 对敏感操作进行二次验证

7. 注意事项

  • 生产环境中应使用环境变量管理密钥
  • 建议使用更强的加密算法
  • 根据实际需求调整Token过期策略

相关文章:

Node.js JWT认证教程

Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案&#xff0c;在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...

【青牛科技】应用于音频信号处理系统的D258 是由两个独立的高增益运算放大器组成

概述&#xff1a; D258是由两个独立的高增益运算放大器组成。可以是单电源工作&#xff0c;也可以是双电源工作,电源的电流消耗与电源电压大小无关。应用范围包括变频放大器、DC增益部件和所有常规运算放大电路。 主要特点&#xff1a; ● 可单电源或双电源 工作 ● 在一个封…...

HTML Input 文件上传功能全解析:从基础到优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

小程序 —— Day1

组件 — view和scroll-view view 类似于HTML中的div&#xff0c;是一个块级元素 案例&#xff1a;通过view组件实现页面的基础布局 scroll-view 可滚动的视图区域&#xff0c;用来实现滚动列表效果 案例&#xff1a;实现纵向滚动效果 scroll-x属性&#xff1a;允许横向滚动…...

4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…...

SQL 获取今天的当月开始结束范围:

使用 GETDATE() 结合 DATEADD() 和 DATEDIFF() 函数来获取当前月的开始和结束时间范围。以下是实现当前月时间范围查询的 SQL&#xff1a; FDATE > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) FDATE < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) 1, 0) …...

Qt复习学习

https://www.bilibili.com/video/BV1Jp4y167R9/?spm_id_from333.999.0.0&vd_sourceb3723521e243814388688d813c9d475f https://subingwen.cn/qt/qt-primer/#1-4-Qt%E6%A1%88%E4%BE%8B https://subingwen.cn/qt/ https://download.qt.io/archive/qt/1.1Qt的特点 1.2QT中的…...

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 输入输出示例 &#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…...

C++的一些经典算法

以下是C的一些经典算法&#xff1a; 一、排序算法 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a; 它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...

Windows环境中Python脚本开机自启动及其监控自启动

1 开机自启动 Windows 10/Windows Server 201X具有一个名为“启动”的已知文件夹&#xff0c;系统每次启动开始自动运行应用程序、快捷方式和脚本时都会检查该文件夹&#xff0c;而无需额外配置。 要在Windows启动时运行脚本&#xff0c;先使用WindowsR快捷键打开“运行”对话…...

XML 语言随笔

XML的含义 XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。XML与HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;类似&#xff0c;但XML的设计目的是描述数据&…...

E卷-分割数组的最大差值

分割数组的最大差值 问题描述 给定一个由若干整数组成的数组 n u m s nums nums,可以在数组内的任意位置进行分割,将该数组分割成两个非空子数组(即左数组和右数组)。分别对子数组求和得到两个值,然后计算这两个值的差值。请输出所有分割方案中,差值的最大值。 输入格…...

基于SpringBoot校园台球厅人员与设备管理系统设计与实现

1.1课题背景与意义 在Internet高速发展的今天&#xff0c;计算机的应用几乎完全覆盖我们生活的各个领域&#xff0c;互联网在经济&#xff0c;生活等方面有着举足轻重的地位&#xff0c;成为人们资源共享&#xff0c;信息快速传递的重要渠道。在中国&#xff0c;网上管理的兴起…...

异步FIFO的实现

异步FIFO是verilog中常见的设计&#xff0c;通常用于不同时钟域下的数据同步。 在实现 FIFO 时&#xff0c;无论是同步 FIFO 还是异步 FIFO &#xff0c;通常会通过双口 RAM &#xff08; Dual Port RAM &#xff09;并添加一些必要的逻辑来实现。双口 RAM的设计如下&#xff1…...

关于找工作的一些感悟

2024年找工作可以说难度十分艰巨&#xff0c;尤其是年底&#xff0c;除了外包公司还在不停的招聘以外&#xff0c;自研的公司基本很少在招聘了。今年有一个很大的感受就是投递了简历可能都没有几个人回复&#xff0c;即使有人回复百分之八十都是拒绝的&#xff0c;拒绝的理由一…...

docker 相关问题记录

docker mysql 一直重启解决办法&#xff08;断电或者重启&#xff09; 一直重启。。因为是内部开发&#xff0c;也没有备份最新的。所以不能删了重来。 方法&#xff1a; docker logs mysql5.7 看到错误跟innodb有关。 具体原因可以参考 http://acuilab.com/articles/2019/1…...

Devops 实践

Devops 实践 基本概念jenkins实践安装jenkins仓库环境准备代码环境准备第一次构建持续集成持续部署集成插件 优秀实践心得体会 参考 摘要&#xff1a;本文首先将介绍一些基本概念&#xff0c;包括Devops&#xff0c;CI/CD等&#xff0c;然后基于知名开源CI/CD工具jenkins进行实…...

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...

医疗系统国产数据库高质量发展路径探析

信息工程人员操作数据库 一、国外数据库在医疗系统中的困境 &#xff08;一&#xff09;数据分散与难以整合 在美国&#xff0c;分散式医疗服务成为癌症研究数据库优化的巨大障碍。患者先在社区接受肿瘤科医生常规检查&#xff0c;再到学术医疗中心进行尖端治疗&#xff0c;然…...

微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档

要解决此问题&#xff0c;需打开微信小程序开发者工具进行设置&#xff0c;打开详情-本地设置重新运行&#xff0c;该报错就没有啦...

智能租赁管理系统助力规范化住房租赁市场提升用户体验

内容概要 在当今的住房租赁市场中&#xff0c;智能租赁管理系统应运而生&#xff0c;为房东和租客带来了前所未有的便利。这套系统就像一位全能助手&#xff0c;将租赁信息、监管机制以及在线签约功能集成在一起&#xff0c;让整个过程变得流畅而高效。换句话说&#xff0c;您…...

MicroBlaze软核开发(一):Hello World

实现功能&#xff1a;使用 MicroBlaze软核 串口打印 Hello World Vivado版本&#xff1a;2018.3 目录 MicroBlaze介绍 vivado部分&#xff1a; 一、新建工程 二、配置MicroBlaze 三、添加Uart串口IP 四、生成HDL文件编译 SDK部分&#xff1a; 一、导出硬件启动SDK 二、…...

跟着问题学15——GRU网络结构详解及代码实战

1 RNN的缺陷——长期依赖的问题 &#xff08;The Problem of Long-Term Dependencies&#xff09; 前面一节我们学习了RNN神经网络&#xff0c;它可以用来处理序列型的数据&#xff0c;比如一段文字&#xff0c;视频等等。RNN网络的基本单元如下图所示&#xff0c;可以将前面的…...

【uniapp】swiper切换时,v-for重新渲染页面导致文字在视觉上的拉扯问题

问题描述 先用v-for渲染了几个列表&#xff0c;但这几个列表是占同一个位置的&#xff0c;只是通过切换swiper来显示哪个列表显示&#xff0c;也就是为了优化页面切换时候&#xff0c;没有根据swiper的current再更新v-for的数据&#xff0c;但现在就有个问题&#xff0c;怎么隐…...

【Android】Compose初识

文章目录 1.Compose是什么2.Compose优势3.可组合函数4.布局5.配置布局6.Material Design7.列表与动画8.声明式UI9.组合10.重组 1.Compose是什么 Jetpack Compose是谷歌开发的一个现代的、声明式的UI工具包&#xff0c;用于构建原生的Android应用程序界面。它简化了创建复杂用户…...

前端工程化面试题(二)

前端模块化标准 CJS、ESM 和 UMD 的区别 CJS&#xff08;CommonJS&#xff09;、ESM&#xff08;ESModule&#xff09;和UMD&#xff08;Universal Module Definition&#xff09;是前端模块化标准的三种主要形式&#xff0c;它们各自有不同的特点和使用场景&#xff1a; CJS&…...

以攻击者的视角进行软件安全防护

1. 前言 孙子曰&#xff1a;知彼知己者&#xff0c;百战不殆&#xff1b;不知彼而知己&#xff0c;一胜一负&#xff0c;不知彼&#xff0c;不知己&#xff0c;每战必殆。 摘自《 孙子兵法谋攻篇 》在2500 年前的那个波澜壮阔的春秋战国时代&#xff0c;孙子兵法的这段话&…...

008.精读《Apache Paimon Docs - Table w/o PK》

文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文&#xff0c;上篇我们了解了Apache Paimon 主键表&#xff0c;本期我们将继续学习附加表&#xff08;Append…...

C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)

结果展示 此类原理适用于文件夹中自动生成图片&#xff0c;并提取最新生成的图片将其显示&#xff0c; 如果你是相机采图将其保存到本地&#xff0c;可以用这中方法可视化&#xff0c;并将检测的结果和图片匹配 理论上任何文件都是可以监视并显示的&#xff0c;我这里只是做了…...

使用SQLark分析达梦慢SQL执行计划的一次实践

最近刚参加完达梦的 DCP 培训与考试&#xff0c;正好业务系统有个 sql 查询较慢&#xff0c;就想着练练手。 在深入了解达梦的过程中&#xff0c;发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…...