灏天阁

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 数据
});

- Book Lists -