jwt和session二者区别
- session是把身份信息存在服务端的,jwt是存在客户端的
- session有跨域问题,jwt没有跨域问题
session
安装express-session
npm i express-session
配置中间件
// 导入express模块
const express = require('express')
// 导入express-session
const session = require('express-session')
const app = express()
// 配置session中间件
app.use(session({
secret: 'asse', //secret 属性值可以是任意字符串
resave: false, //固定写法
saveUninitialized: true //固定写法
}))
托管静态文件在本地防止跨域
// 托管文件
app.use(express.static('../html'))
// 使用中间件设置请求体数据
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
//防止乱码
app.use((request, response, next) => {
response.setHeader('Content-Type', 'text/html; charset=utf-8')
next()
})
把身份信息储存在服务端
app.post('/api/login', (request, response) => {
if (request.body.username != 'admin' || request.body.password != '0000') {
return response.send({
status: 1,
msg: "登陆失败"
})
}
// 设置session
request.session.userInfo = request.body
request.session.islogin = true
response.send({
status: 0,
msg: "登陆成功",
username: request.session.userInfo.username
})
})
app.get('/api/user', (request, response) => {
if (!request.session.islogin) {
return response.send({
status: 1,
msg: '获取失败'
})
}
response.send({
status: 0,
msg: '登陆成功',
username: request.session.userInfo.username
})
})
清除缓存(只会清除当前用户)
app.post('/api/logout', (request, response) => {
//清空缓存, 只会清空当前用户不会清空其它用户
request.session.destroy()
response.send({
status: 1,
msg: '用户退出成功'
})
})
// 错误中间件写在后边,四个参数,防止程序崩溃
app.use((erro, res, req, next) => {
req.send("错误的请求" + erro.message)
})
app.listen(8890, () => {
console.log('启动成功')
})