安装依赖项:
npm 安装 jsonwebtoken bcryptjs
配置JWT:
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const Secret = 'your_jwt_secret'; // 在实际应用中使用环境变量 ````
定义用户架构:
const userSchema = new mongoose.Schema({ 用户名:{ 类型:字符串,必要:true,唯一:true }, 密码:{ 类型:字符串,必要:true } }); userSchema.pre("保存", 异步函数(下一个) { if (this.isModified(‘密码’) { this.password = 等待 bcrypt.hash(this.password, 10); } 下一个(); }); const User = mongoose.model(用户, userSchema);
用户注册端点:
app.post('/register', async (req, res) => { const user = new User(req.body); 尝试 { 等待用户.save(); res.status(201).json(用户); } 捕获(错误){ res.status(400).json({ 错误: err.message }); } });
登录端点:
app.post('/login', async (req, res) => { const { 用户名, 密码 } = req.body; 尝试 { const user = wait User.findOne({ 用户名 }); if (用户 && 等待 bcrypt.compare(密码, user.password)) { const token = jwt.sign({ id: user._id, username: user.username }, Secret, { expiresIn: '1h' }); res.json({ 令牌 }); } 别的 { res.status(401).send(凭证无效); } } 捕获(错误){ res.status(500).json({ 错误: err.message }); } });
中间件的身份验证:
const authMiddleware = (req, res, next) => { const token = req.header(‘授权’).replace“承载”, ''); 如果(!令牌){ return res.status(401).send("访问被拒绝"; } 尝试 { const 解码 = jwt.verify(令牌, 秘密); req.user = 已解码; 下一个(); } 捕获(错误){ res.status(400).send(‘无效令牌’); } };
保护端点:
app.get('/profile', authMiddleware, async (req, res) => { 尝试 { const user = wait User.findById(req.user.id); res.json(用户); } 捕获(错误){ res.status(500).json({ 错误: err.message }); } });
第 7 周到第 10 为了提供全面的学习体验,本周的详细分解包括解释和实践代码示例。
以上是认证和授权的详细内容。请关注其他相关文章!
认证与授权-js教程
热、冷、温备份:数据守护的三重境界
高效远程端口检查,确保网络安全无忧
腾讯云轻量服务器,高性价比,优惠享不停!
远程桌面端口映射:速设快捷键教程
【Linux的历史】:起源于第一种编程语言和第一个操作系统-C
高效数据守护,稳固备份系统,安全无忧!
【Linux的历史】:起源于第一种编程语言和第一个操作系统-C
今天,我正在做一个项目,我需要找到一种本地化的方法 JSON 文件。我的第二语言是英语。我有一些参与本地化项目的经验。因此,将这些文件从西班牙语本地化为英语没有问题,但当需要翻译许多字符串时,如何优化流程?使用 DeepL API 并专注于验证翻译是否正确。
深L在使用 DeepL API 在此之前,你必须创建一个免费帐户。
C 中间的计数范围-C
Leetcode Day 删除排序数组中的重复解释-Python教程
Python-Python教程在我的生活中
注入的下拉值-C
了解 Go 垃圾收集器:详细指南-Golang
VS Code 于 6 月 4 Python教程日进行了不可思议的更新
使用 TypeScript 迁移 NestJS 微服务到 Go:一周的发现-Golang
指针:它们指向什么?-C
Laravel 设计模式:使用可重用的解决方案来提高代码水平-php教程
如何通过 SPVM 使用 Perl 中的 zlib(一个 C 库)-C