Node.js实现密码散列加密

bcrypt的散列是不可逆的散列,并且针对同样的值每次都会生成不一样的值。

1. 安装所需的包:

npm i bcryptjs --save

2. 修改MongoDB中的模型:

// /models/AdminUser.js

const mongoose = require('mongoose')
// 定义模型的字段
const schema = new mongoose.Schema({
    username: { //用户名
        type: String,
        unique: true,
    },
    password: { //密码,进行散列加密
        type: String,
        select: false, //让密码在界面中默认无法查询到
        set(val) {
            return require('bcryptjs').hashSync(val, 10) //第一个参数是这个值,第二个参数是散列的加密指数
        },
    },
})
// 导出mongoose模型
module.exports = mongoose.model('AdminUser', schema)

3. 实现登录功能:

# 用于做webtoken验证
npm i jsonwebtoken
// /routes/admin/index.js

// module.exports导出一个函数,参数接收函数对象,在里面就可以用最外层的app
module.exports = app => {

    //登录
    app.post('/admin/api/login', async (req, res) => {
        const {
            username,
            password
        } = req.body
        //1、根据用户名找用户,查的时候把password字段取出来
        const AdminUser = require('../../models/AdminUser')
        const user = await AdminUser.findOne({
            username: username
        }).select('+password')
        if (!user) {
            return res.status(422).send({
                message: '用户不存在',
            })
        }
        //2、校验密码
        const isValid = require('bcryptjs').compareSync(password, user.password) //比较明文和密文是否匹配
        if (!isValid) {
            return res.status(422).send({
                message: '密码错误',
            })
        }
        //3、返回token
        const jwt = require('jsonwebtoken')
        const token = jwt.sign({  //生成一个token
            id: user._id
        }, app.get('secret'))
        res.send({ //把token返回给客户端
            token
        }) 
    })

}

技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-1.管理员模块_最强的森的博客-CSDN博客技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-1.管理员模块相关文章:技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-启动项目技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-12-1.管理员模块网站的必备功能:用户登录。用户登录功能是网站安全的一大重点,网站做的再好看,再完善,如果没有一个安全的管理员通道,都算不上一个成功的网站。今天起的几篇文章对用户登录进行专门学习。本篇文章我们将管理员模块实现。1.管理员模块的实https://blog.csdn.net/m0_51592186/article/details/116916362

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值