文档
https://www.expressjs.com.cn/en/resources/middleware/session.html
逻辑
=====登陆=====
后端获取账号密码
密码加密
查询账号是否存在
账号不存在
返回错误码
账号存在
查询密码是否符合
不符合
返回密码错误数据
符合
设置session
设置cookie
返回成功数据
=====登录状态保持=====
拦截所有请求(在登录路由之后,要不然登录不了)
请求是否带有cookie
不带cookie
状态为未登录,返回错误码
带cookie
与session中对应的数据比较
不同
状态为未登录,返回错误码
相同
状态为已登录,跳到下一个中间件
中间件
cookie-parser
import cookieParser from 'cookie-parser';
app.use(cookieParser());
设置,读取
//读取
req.cookies[key]
//设置
res.cookie(key, value, config );
express-session
import session from 'express-session';
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 60 * 60 * 1000,
},
rolling: true, //在每次请求时强行设置 cookie,重置 cookie 过期时间(默认:false)
})
);
设置,读取
//读取
req.session[key]
//设置
req.session[key]=value
核心代码
app.ts
app.post('/login',(req,res,next)=>{
let {username,password} = req.body
if(用户存在&&账户密码正确){
//简单的把账户名作为session和cookie
req.session[username]=username
res.cookie(username, username, { maxAge: 60 * 1000, httpOnly: true });
res.send({msg:"登录成功"})
}else{
res.send({msg:"登录失败"})
}
})
//拦截所有的请求
app.use((req,res,next)=>{
//比较cookie和session
if(req.cookies['username'] == req.session['username']){
//相同,则视为已登录状态,跳到下一个中间件
next()
}else{
//不同,则未登录,拦截请求,直接返回错误值。
res.send({msg:"未登录"})
}
})
版权声明:本文为qq_34838046原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。