1.需要用的包、库
npm i express@next 需要用express请求 文档链接
npm i mongoose mongDB数据库 可以自动创建你所需要的数据库 文档链接
密钥加密 npm i bcrypt (散列 加密)
npm i jsonwebtoken 生成token
server的配置
const express=require('express')
const {User}= require('./models')
const app=express()
const jwt=require('jsonwebtoken')
const SECRET="hahahahhahaaha"
// nodemon server.js 运行
app.use(express.json())
app.get('/',async(req,res)=>{
res.send(res.body)
console.log(res.body);
})
//查看所有用户
app.get('/api/users',async(req,res)=>{
const user=await User.find()
res.send(user)
})
// 登陆
app.post('/api/login',async(req,res)=>{
const user =await User.findOne({
username:req.body.username
})
if(!user){
return res.status(422).send({
message:'用户名不存在'
})
}
// 验证密码
// npm i bcrypt
const isPasswordValid=require('bcrypt').compareSync(
req.body.password,
user.password
)
console.log(isPasswordValid);
if(!isPasswordValid){
return res.status(422).send({
message:'密码错误'
})
}
// 生成token npm i jsonwebtoken
const jwt=require('jsonwebtoken')
const token= jwt.sign({
id:String(user._id),
},SECRET)
// 简写token:token
res.send({user,token})
})
//注册
app.post('/api/register',async(req,res)=>{
// console.log(req.body);
const user=await User.create(
{
username:req.body.username,
password:req.body.password
}
)
res.send(user)
})
// 中间件表示这个执行完毕执行下一串代码
const auth=async(req,res,next)=>{
const raw=String(req.headers.token)
// 验证token
const {id}=jwt.verify(raw,SECRET)
console.log(id);
req.user= await User.findById(id)
next()
}
app.get('/api/profile',auth,async(req,res)=>{
res.send(req.user)
})
app.listen(3001,()=>{
console.log('http://localhost:3001/api/profile');
})
model.js的配置
const mongoose=require('mongoose')
mongoose.connect('mongodb://localhost:27017/express-auth',{
})
const UserSchema= new mongoose.Schema({
username:{type:String,unique:true},
password:{type:String,set(val){
//散列加密 2:加密等级 递增 npm i bcrypt
return require('bcrypt').hashSync(val,2)
}}
})
const User=mongoose.model('User',UserSchema)
// User.db.dropCollection('users')
module.exports={User}