使用Express创建一个服务端项目 创建express此处有详解
不在过多讲解以上的配置及创建
###
密码加密是一种保护用户数据安全的重要措施。加密密码可以确保未经授权的人无法访问用户帐户或敏感信息,即使数据库或服务器被攻击者入侵也是如此,无法获取到你的密码。
防止数据泄露:如果用户密码以明文存储在数据库中,则任何人都可以轻松地访问它们。如果数据库或服务器被攻击,则攻击者可以窃取这些密码并访问用户数据。使用加密密码可以防止这种情况发生。
保护用户隐私:用户密码通常与他们的个人身份信息和其他敏感数据相关联。如果这些密码被暴露,攻击者可以窃取用户身份并利用其个人信息进行恶意活动。通过加密密码,可以确保用户数据保持私密。
符合法规要求:在某些情况下,法规可能要求组织对存储在其系统中的用户数据进行加密。例如,根据欧洲通用数据保护条例(GDPR)等法规,组织必须采取适当的安全措施来确保个人数据的保密性和完整性。
###
bcryptjs
模块是什么?bcryptjs
模块是一个用于密码哈希和验证的 JavaScript 库。它提供了一种安全的方式来存储用户密码,以防止密码泄露时的潜在风险。
bcryptjs
使用了 bcrypt 算法,这是一个基于 Blowfish 密码加密算法的适用于密码哈希的函数。bcrypt 算法通过将密码进行多次迭代的哈希处理,并添加随机的 salt(盐)值来增加密码的安全性。这种方式使得密码哈希的破解变得非常困难,即使在大规模的计算资源攻击下也能提供较高的安全性。
使用 bcryptjs
模块,开发者可以轻松地对用户密码进行哈希处理,并将密码哈希值存储在数据库中。当需要验证用户密码时,可以使用相同的哈希算法和 salt 值来比较用户输入的密码与存储的哈希值是否匹配,从而验证密码的正确性。
###
npm i bcryptjs // bcryptjs模块
###?
直接在文件中配置即可
var express = require("express");
var router = express.Router();
const mongoose = require("mongoose");
const bcryptjs = require("bcryptjs"); // 引入bcryptjs模块
const User = mongoose.model(
"user",
{
username: String,
password: {
type: String,
set(val) {
// 每次数据库进行修改或插入时都会执行set
return bcryptjs.hashSync(val); // 对存入数据库的密码进行加密
},
},
},
"user"
);
router.post("/regs", async (req, res) => {
// 上面定义了set方法所以这里直接入库
await User.create(req.body);
res.send({ code: 200, message: "注册成功" });
});
router.post("/login", async (req, res) => {
let username = req.body.username;
let password = req.body.password;
let user = await User.findOne({ username });
if (!user) {
return res.send({ code: 401, message: "没有这个用户!" });
}
// 使用bcryptjs.compareSync方法进行验证,第一个参数是要验证的字符串,第二个参数是加密过的字符串
if (!bcryptjs.compareSync(password, user.password)) {
return res.send({ code: 402, message: "密码错误!" });
}
res.send({ code: 200, message: "登录成功!" });
});
module.exports = router;
###
bcryptjs
提供的方法bcryptjs
提供了两个同步的方法:compareSync
和 hashSync
。这两个方法与异步方法 compare
和 hash
的作用相同,只是它们是同步调用的,而不是通过回调函数来处理结果。这些同步方法可以更简单地在代码中使用,但不能在 Node.js 事件循环中执行,并且如果密码哈希或验证操作非常耗时,则会阻塞应用程序。
bcryptjs.compareSync(data, encrypted)
方法:
data
?是未加密的数据。encrypted
?是已加密的数据。true
,否则返回?false
。bcryptjs.hashSync(data, saltRounds)
方法:
data
?是需要被哈希的原始数据(例如用户输入的密码)。saltRounds
?指定哈希计算的轮数,通常建议设置为 10 到 12 之间的数值。这两个同步方法与异步方法的使用方式相同,只是它们不需要回调函数来处理结果。如果应用程序的性能要求较低,并且不需要异步处理密码哈希和验证过程,那么可以使用这些同步方法。否则,建议尽可能使用异步方法,以充分利用 Node.js 的非阻塞 I/O 特性。
###
?账号不正确时
密码不正确时?
账号密码都正确时
?
?