Appearance
koa-jwt
简介
koa-jwt是一个用于处理 JSON Web Token (JWT) 的 Koa 中间件,它可以保护指定的路由,验证请求中的 JWT token,并将解码后的 payload 添加到 ctx.state.user 中。
安装
bash
npm install koa-jwt基本使用
javascript
const Koa = require('koa');
const jwt = require('koa-jwt');
const app = new Koa();
// 配置 JWT 中间件
app.use(jwt({
secret: 'your-secret-key' // 用于签名的密钥
}).unless({
path: [/^\/public/, /\/login/] // 不需要验证的路由
}));
// 受保护的路由
app.use(async (ctx) => {
// 验证通过后可以访问 ctx.state.user
ctx.body = { user: ctx.state.user };
});
app.listen(3000);配置选项
secret: 用于签名的密钥key: 存储解码后的 token 的 ctx.state 的属性名,默认为 'user'algorithms: 指定允许的签名算法,如 ['HS256']issuer: token 的签发者audience: token 的接收者debug: 是否开启调试模式
错误处理
javascript
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
if (err.status === 401) {
ctx.status = 401;
ctx.body = {
error: 'Authentication Error',
message: err.message
};
} else {
throw err;
}
}
});生成 Token
javascript
const jwt = require('jsonwebtoken');
// 登录路由
app.use(async (ctx) => {
const { username, password } = ctx.request.body;
// 验证用户名和密码
if (username === 'admin' && password === 'password') {
// 生成 token
const token = jwt.sign(
{ username: 'admin', role: 'admin' },
'your-secret-key',
{ expiresIn: '1h' }
);
ctx.body = { token };
}
});注意事项
- 确保使用安全的密钥,并妥善保管
- 合理设置 token 的过期时间
- 在生产环境中使用 HTTPS
- 注意路由的保护顺序,通常将 JWT 中间件放在其他业务中间件之前
- 建议使用环境变量存储密钥,而不是硬编码在代码中