nodejs中使用bcrypt加密
bcrypt验证方式和其它加密方式不同,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密文一块运算得到另一个密文,如果这两个密文相同则验证成功。
第一步:
.window下安装bcrypt必须先安装node-gyp
npm install --save node-gyp
第二步:
npm install --save bcryptjs
使用bcrypt模块
admin.js
// 博客的展示页面
const express = require("express")
// 创建博客展示页面路由
const admin = express.Router()
const bcrypt = require('bcrypt')
// 导入用户集合构造函数
const { User } = require("../model/user")
const by = require("bcrypt")
admin.get("/login",(req,res)=>{
res.render("admin/login")
})
// 实现登录
admin.post("/login",async (req,res)=>{
// 接收请求参数
let {email,password} = req.body
if( email.trim().length == 0 || password.trim().length == 0){
// return res.status(400).send("<h4>邮件地址或者密码错误</h4>")
return res.status(400).render("admin/ ",{msg:"邮件地址或者密码错误"})
}
// 服务端验证
let user = await User.findOne({ email })
if(user){ // 有查询到用户
var istrue = bcrypt.compareSync(password, user.password)
console.log(istrue);
if( istrue ){
// 登录成功
res.send("<h1>登录成功</h1>")
}else{
res.status(404).render("admin/error",{ msg:"邮箱或密码错误" })
}
}else{ // 没有查询到用户
res.status(404).render("admin/error",{ msg:"此用户不存在" })
}
})
admin.get("/user",(req,res)=>{
res.render("admin/user")
})
module.exports = admin
admin路由文件
// 博客的展示页面
const express = require("express")
// 创建博客展示页面路由
const admin = express.Router()
const bcrypt = require('bcrypt')
// 导入用户集合构造函数
const { User } = require("../model/user")
const by = require("bcrypt")
admin.get("/login",(req,res)=>{
res.render("admin/login")
})
// 实现登录
admin.post("/login",async (req,res)=>{
// 接收请求参数
let {email,password} = req.body
if( email.trim().length == 0 || password.trim().length == 0){
// return res.status(400).send("<h4>邮件地址或者密码错误</h4>")
return res.status(400).render("admin/ ",{msg:"邮件地址或者密码错误"})
}
// 服务端验证
let user = await User.findOne({ email })
if(user){ // 有查询到用户
var istrue = bcrypt.compareSync(password, user.password)
console.log(istrue);
if( istrue ){
// 登录成功
res.send("<h1>登录成功</h1>")
}else{
res.status(404).render("admin/error",{ msg:"邮箱或密码错误" })
}
}else{ // 没有查询到用户
res.status(404).render("admin/error",{ msg:"此用户不存在" })
}
})
admin.get("/user",(req,res)=>{
res.render("admin/user")
})
module.exports = admin
user.js mongodb数据库集合规则模块
// 创建集合规则
const mongoose = require("mongoose")
const bcrypt = require('bcrypt')
// 创建规则
const userSchema = new mongoose.Schema({
username:{
type:String,
require:true,
minlength:2,
maxlength:20
},
email:{
type:String,
// 保证邮箱地址不重复
unique:true,
},
password:{
type:String,
require:true
},
// admin 为超级管理员 normal 为普通用户
role:{
type:String,
require:true
},
// 0 为启用状态 1 为禁用状态
state:{
type:Number,
default:0
}
})
// 体哦那个锅规则创建集合
const User = mongoose.model("User",userSchema)
async function createUser(){
let salt = await bcrypt.genSalt(10)
let pass = await bcrypt.hash("123456",salt)
// 添加一个用户
// await User.create({
// username:"张三",
// email:"2065049187@qq.com",
// password: pass,
// role:"admin",
// state: 0
// })
}
createUser()
module.exports = {
User
}
app.js
// 引用 express 框架
const express = require("express")
const path = require("path")
const app = express()
// 引入数据库
require("./model/connect")
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
// require("./model/user")
// 开放静态资源服务
app.use(express.static( path.join(__dirname,"public") ))
// 告诉express模板的位置
app.set("views",path.join(__dirname,"views"))
// 告诉express模板的默认后缀
app.set("view engine","art")
// 渲染后缀为 art 的时候 模板引擎是什么
app.engine("art",require("express-art-template"))
// 导入 路由模块
const admin = require("./router/admin")
const home = require("./router/home")
// 为路由匹配请求路径
app.use("/home",home)
app.use("/admin",admin)
// 监听端口
app.listen(80)
console.log("网站服务器启动成功...");