# 在 Node 中使用 JWT
# 相关依赖
node 使用 JWT 可以使用两个现成的库
- jsonwebtoken 用来生成 token 的
- koa-jwt 用来验证 token 是否还合法(是否过期了,是否是伪造的)
# 示例代码
使用代码如下:
const Koa = require("koa");
const app = new Koa();
const router = require("koa-router")();
const jsonWebToken = require("jsonwebtoken");
const koaJWT = require("koa-jwt");
const secret = "asecretkey";
// jwt 校验报错拦截
app.use(async (ctx, next) => {
await next().catch((err) => {
if (err.status == "401") {
ctx.status = 200; // 这个200是保证浏览器响应成功
ctx.body = {
msg: "Token认证失败",
code: 500001,
data: "",
};
} else {
throw err;
}
});
});
// 这里解析 jwt 是否合法
app.use(
koaJWT({ secret: secret }).unless({
path: "/login",
})
);
// 登录
router.post("/login", async (ctx) => {
const { username, password } = ctx.request.body;
if (!username || !password) {
ctx.body = {
msg: "用户名或密码不正确",
code: "40001",
data: "",
};
return;
}
const token = jsonWebToken.sign(
{ username, password },
secret, // 密钥
{ expiresIn: 60 } // 过期时间 60s
);
ctx.body = {
msg: "登录成功",
code: 200,
data: { userid: "12345678", token },
};
});
// 验证 token
router.post("/login-test", async (ctx) => {
ctx.body = "Login Test OK";
});
app.use(router.routes(), router.allowedMethods());
app.listen(3002, () => {
console.log("koa run at 3002");
});
# 验证注意
- 使用 postman 验证效果即可
- 登录生成 token 没有什么注意点,post 请求,正常传参即可
- 验证
login-test
接口时需要注意,token 的认证需要在 header 中配置 token 信息,配置形式是Bearer token值
,不要忘了 Bearer 前缀。
# 当前依赖版本展示
{
"jsonwebtoken": "^9.0.0",
"koa": "^2.14.1",
"koa-jwt": "^4.0.3",
"koa-router": "^12.0.0"
}