安装
npm install bcryptjs
https://www.npmjs.com/package/bcryptjs
以下我列举了一种同步的加密以及验证的方法 (异步方法请参考点击上面的链接去官方文档参考用法)
加密
var bcrypt = require('bcryptjs');let password = 'bacon'// 对密码进行10位的加盐 设置为 8 就是 8位加盐let num = 10var hash = bcrypt.hashSync(password, num);
验证
let password = 'bacon'let passwordNew = 'abcon'// hash 是从数据库取出来的密码let hash = '$2a$10$VBUcXzdGtDhL8.MCLCw7ZeUJvzWv9IrOrxNCg9ctwYE9lOUb30LUq'bcrypt.compareSync(password, hash); // truebcrypt.compareSync(passwordNew, hash); // false
全部代码
const express = require('express');const mongoose = require('mongoose');var bcrypt = require('bcryptjs');const app = express();// 引入用户模块const User = require('./models/user');// 处理post请求app.use(express.json())app.use(express.urlencoded({ extended: false }))//跨域处理app.use((req, res, next) => {res.set('Access-Control-Allow-Origin', '*')res.set('Access-Control-Allow-Headers', 'content-type')next()})// mongoose 连接mongoose.connect('mongodb://127.0.0.1:27017/v2_demo', {useNewUrlParser: true,useUnifiedTopology: true}).then(() => {console.log('数据库链接成功')}).catch(() => {console.log('数据库链接失败')})app.post('/register', async (req, res) => {// console.log(req.query)let username = req.body.usernamelet password = req.body.password// 先查询有没有这个用户await User.findOne({username},function(err, doc){if(err) {console.log(err.message)res.send({code: 0, msg: '请稍后再试'}); return}console.log(doc)// 如果有 则注册失败if(doc) {let sendData = { data: {}, code: 0, msg: '用户已存在' }res.send(sendData); return}})// 对用户密码进行加密 然后存储到数据库password = bcrypt.hashSync(password, 10);console.log(password)const newUser = new User({username,password})// 如果没有 则注册await newUser.save()res.send({ code: 1, data: newUser, msg: '注册成功' }); return})app.post('/login', async (req, res) => {let username = req.body.usernamelet password = req.body.password// let hash = bcrypt.hashSync(password, 10)// 先根据用户名 查询有没有这个用户await User.findOne({username},function(err, doc){if(err) {console.log(err.message)res.send({code: -1,msg: '用户名或密码错误'})}else{// 如果有这个用户if(doc) {let isOK = bcrypt.compareSync(password, doc.password);// 再验证密码是否正确if(isOK) {let sendData = {create_time: doc.create_time,code: 1,msg: '登录成功',data: { username: doc.username, id: doc._id, loginTime: new Date().getTime() }}res.send(sendData)return}// 密码验证不通过res.send({code: -1,msg: '用户名或密码错误'})return false}// 没有这个用户res.send({code: -1,msg: '用户名还没有注册'})}})})// 可以修改启动的服务端口号let ports = 3000// process.env.PORT = portsapp.listen(ports, () => {console.log( ports +'端口监听成功')})
user.js
const mongoose = require('mongoose');// 创建一个表结构var Schema = mongoose.Schema;var userSchema = new Schema({username: { type: String, required: true },password: { type: String, required: true },create_time: { type: Number, default: Date.now }});// 定义一个索引// userSchema.index({uid: 1, type: 1})var User = mongoose.model('user', userSchema);module.exports = User
