koa教程2 token鉴权
之前我们在token中传入我们的自定义参数,现在我们要做一个token鉴权,很简单,如果他的token合法,就可以访问这个路由,如果不合法,就打回。
这个也不能说是真正意义上的鉴权,因为他还没有判断scope值,所以只能说是简单判断。
做这个判断我们就可以通过中间件的形式,于是我们在middlewares
目录下创建一个auth.js
文件
auth.js:
const parseBearerToken = require("@utils/paresBearerToken");
const jwt = require("jsonwebtoken");
const { tokenConfig } = require("@config/config");
const { TokenError } = require("@core/http-error");
class Auth {
constructor() {
}
get token() {
return async (ctx, next) => {
//获取头信息中的token
const token = parseBearerToken(ctx.header);
//解析token
try {
var decode = jwt.verify(token, tokenConfig.key);
} catch (error) {
//token解析错误
let errorMsg = "token解析失败"
if (error.name === "TokenExpiredError") {
errorMsg = "token已失效";
};
throw new TokenError(errorMsg);
}
//赋值到ctx
ctx.auth = decode;
//下一个中间件
await next();
}
}
}
module.exports = { Auth };
在jwt中,如果token不合法,错误,或者已经过期了,通过verify解析都会抛出错误,其中如果是解析错误,catch捕获的错误对象name为"TokenExpiredError"
,我们通过这个判断然后给出对应的错误信息。
如果token解析成功,则会返回这么一个对象:
{ uid: 1, scope: 8, iat: 1616308366, exp: 1616315566 }
我们通过var赋值到decode变量中,由于我们后面的路由可能还需要拿到token中的信息,所以我们将decode挂载到上下文ctx的auth中,然后next下一个。
这样我们可以在下一个路由中通过ctx.auth获取到token信息。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据