91.《nodejs中使用bcrypt加密》

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("网站服务器启动成功...");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值