使用TypeScript+Express+NodeJS+MongoDB 开发 Web APIs,如有错误可以击提issue 💪,如果觉得ok,请点个star 🙏,
送人玫瑰、手有余香
仓库地址 ➡️FE_note
本系列文章
文章目录
auth
本文我们采用bcrypt npm 包实现的bcrypt哈希算法,
npm install bcrypt
npm install --save-dev @types/bcrypt
举个🌰👇
const passwordInPlainText = '12345678';
const hashedPassword = await bcrypt.hash(passwordInPlaintext, 10);
const doPasswordsMatch = await bcrypt.compare(passwordInPlaintext, hashedPassword);
console.log(doPasswordsMatch); // true
登录与注册模块
首先对用户创建前置加入密码加密、和用户登录时密码校验逻辑。此时我们可以将此逻辑加入到Model层。
user.model.ts
userSchema.pre('save',function(next){
if(!this.isModified('password')){
return next()
}
bcrypt.hash(this.password,8,(err,hash)=>{
if(err){
return next(err)
}
this.password=hash;
return next();
})
})
userSchema.methods.checkPassword=function(password:string){
const passwordHash = this.password;
return new Promise((resovle,reject)=>{
bcrypt.compare(password,passwordHash,(err,same)=>{
if(err) return reject(err)
return resovle(same)
})
})
}
下面我们我们来实现登录和注册模块。
src/controllers/ authcontroller.ts
import {
Request, Response, NextFunction } from 'express'
import User from '../models/user.model'
import NotFoundException from '../expceptions/notFoundException'
import HttpException from '../expceptions/httpException'
class