工作原理
session为为客户端浏览器生成一个cookie记录每个客户的id,当每次客户端发送请求时,携带这个id发送,在服务器端接口可以通过该id,获取该id用户的数据,通过req.session调用.用户信息存储在服务器端.
JWT为将用户信息通过加密为jwt字符串发送给客户端,客户端将其保存在localStorage或sessionStorage,在客户端每次发送需要用户权限认证的请求时,将客户端浏览器中的jwt字符串通过在请求中挂载请求头Authorization发送给服务器.在服务器中解码为用户信息,进行权限认证或者给客户端使用.
使用方式
Session
const session = require("express-session")
const cors = require("cors") //使用session需要处理跨域请求
app.use(cors());
app.use(session({
secret:"amahamiu",
resave: false,
saveUninitialized:true
}))
app.get('/user', (req, res) => {
req.session.user = req.query.id //客户端第一次调用接口在客户端cookie上绑定一个
//sessionid的键值对,用户信息存储在服务器端
res.send('Hello World!')
})
app.get("/get" , (req , res)=>{ //之后每次调用接口,会通过请求头将cookie带给服务器.针对cookie获
//取服务器端用户信息,赋给req.sesion
res.send(req.session.user);
})
JWT
const jsonwebtoken = require("jsonwebtoken") //用于加密用户信息生成token
const { expressjwt: jwt } = require("express-jwt"); //用于解密token还原用户信息
const secretKey = "amahamiu";//加解密密码
app.use(jwt({secret:secretKey,algorithms: ["HS256"]}).unless({ path: ["/user"] }))
//使用该中间件后,会自动在每次客户端请求查看请求头中的Authorization字段,将其解密后绑定给req.auth
//unless用于忽略不需要查看请求头的请求地址.若不忽略,且请求中不存在Authorization字段,会报错
app.get('/user', (req, res) => {
res.send({
status:200,
token:jsonwebtoken.sign({id:200} , secretKey , {expiresIn:"100s"})//加密
})
})
app.get("/get" , (req , res)=>{
res.send({
data:req.auth //取值
})
})