Node/Koa2[35]: 登录验证中间件 loginCheck 处理
·
Yin灏
src/middlewares/loginChecks.js
const { ErrorModel } = require("../model/ResModel");
const { loginCheckFailInfo } = require("../model/ErrorInfo");
async function loginCheck(ctx, next) {
if (ctx.session && ctx.session.userInfo) {
// 已登录
await next();
return;
}
// 未登录
ctx.body = new ErrorModel(loginCheckFailInfo);
}
/*
路由中间件:访问任何路由的收时候,先执行这个中间件,检测用户是否登录,相当于路由守卫
*/
async function loginRedirect(ctx, next) {
if (ctx.session && ctx.session.userInfo) {
// 已登录
await next();
return;
}
// 未登录
const curUrl = ctx.url;
ctx.redirect("/login?url=" + encodeURIComponent(curUrl));
}
module.exports = {
loginCheck,
loginRedirect,
};
使用页面路由登录中间件
src/routes/index.js
//...
const { loginRedirect, loginCheck } = require("../middlewares/loginChecks");
//...
router.get("/", loginRedirect, async (ctx, next) => {
//...
// 这里返回的是页面
});
//...
router.get("/json", loginCheck, async (ctx, next) => {
//...
// 这里是用过 ctx.body 返回的 json 数据
});