路由拦截的意义
根据标识(session)来判断用户是否是合法用户,为了保证这个表示的安全性,这个标识可由服务端生成,并且客户端不能随意修改,每次客户端在请求接口前,必须要查询session的合法性。
session与路由拦截
- session:存储在cookie中的一种识别用户身份和行为的有效信息。
- 所谓拦截就是在用户指定行为前,进行session校验,判断是否是合法用户
- 常用的常用的拦截有三种:1.session 2.token 3.token+session
使用koa-session设置session
const session = require('koa-session');
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa:sess',
maxAge: 86400000, //这个是确定cookie的有效期,默认是一天。
overwrite: true,
httpOnly: true, //表示是否可以通过javascript来修改,设成true会更加安全
signed: true, //cookie的安全性 会自动给cookie加上一个sha256的签名
rolling: false, //这两个都是涉及到cookie有效期的更新策
renew: false, // 这两个都是涉及到cookie有效期的更新策
};
app.use(session(CONFIG, app));
let home = new Router();
// 每次在get请求前进行判断
home.get("/",async (ctx)=>{
if (ctx.path === '/favicon.ico') return;
let n = ctx.session.views || 0;
ctx.session.views = ++n;
if(n==17){
throw new Error({
success:1
})
}else{
ctx.body ={
success:0
};
}
})
const router = new Router();
router.use("/",home.routes())
app.use(router.routes());
app.listen(1111);
客户端获取session是否合法
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response.success === 1) {
router.push('/login');
}
return Promise.reject(error);
}
)
总结
- session这种是由服务端生成的,通过cookie传输,过期时间由服务器设定,每次 请求前都要检测session是否存在,存在跨域的问题

确认评论邮箱
邀请制评论