当前位置: 代码迷 >> 综合 >> 关于 koa2 使用 koa-jwt 出现的问题
  详细解决方案

关于 koa2 使用 koa-jwt 出现的问题

热度:26   发布时间:2023-12-02 00:28:43.0

在使用 koa-jwt 的时候要进行 Token 的身份认证,处理 UnauthorizedError 错误,所以要添加中间件,但是 koa2 的处理 jwt 创建错误的中间件与 express 不同

express 处理中间件:

// 导入 express 模块
const express = require("express");//一定要在路由之前配置解析Token的中间件
const expressJWT = require("express-jwt");// 导入配置文件
const config = require("./config");// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证(这里需要注意,secret必须配置algorithms属性)
app.use(expressJWT({ secret: config.jwtSecretKey, algorithms: ["HS256"] }).unless({path: [/^\/api\//]})
);// 身份认证错误中间件
app.use(function (err, req, res, next) {// 捕获身份认证失败的错误if (err.name === "UnauthorizedError") {return res.cc("身份认证失败!");} else {// 未知错误...res.cc(err);}
});// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(3000, function () {console.log("api server running at http://127.0.0.1:3000");
});

express 错误处理中间件是放在 app.use(expressJWT.... 后面的 但是 koa2 确不同,因为我习惯了 express 所以使用 koa2 的时候出现了错误,koa2 应该把错误处理中间件放在前面

const Koa = require("koa");
const app = new Koa();// 导入配置文件
const { TOKEN_CONF } = require("./config/index");//一定要在路由之前配置解析Token的中间件
const koaJWT = require("koa-jwt");// 身份认证错误中间件
app.use(async (ctx, next) => {return next().catch(err => {if (err.status === 401) {// 自定义返回结果ctx.status = 401;console.log(err.name);ctx.body = {code: 401,msg: err.message};} else {throw err;}});
});// 使用 .unless({ path: [/^\/api\//] }) 指定哪些接口不需要进行 Token 的身份认证(这里需要注意,secret必须配置algorithms属性)
app.use(koaJWT({ secret: TOKEN_CONF.jwtSecretKey, algorithms: ["HS256"] }).unless({path: [/^\/api\//]})
);module.exports = app;