koa使用jsonwebtoken
时间: 2025-06-27 17:17:40 浏览: 15
### 集成 JWT 进行身份验证
#### 安装必要的包
为了在 Koa 框架中实现 JWT 身份验证,需安装 `koa-jwt` 中间件。此中间件依赖于 `jsonwebtoken`,因此通常无需单独安装后者[^3]。
```bash
npm install --save koa-jwt
```
#### 创建 Token
创建 token 一般发生在用户成功登录后。通过 `jsonwebtoken.sign()` 方法来生成带有有效载荷(payload)和密钥(secret key)的 token[^2]。
```javascript
const jwt = require('jsonwebtoken');
// 登录逻辑处理函数
async function login(ctx) {
const user = await User.findOne({ username: ctx.request.body.username });
if (user && user.password === ctx.request.body.password) { // 假设密码未加密存储
const token = jwt.sign({ id: user.id }, 'your_secret_key', { expiresIn: '1h' }); // 使用 secret key 签名并设置过期时间
ctx.body = { success: true, message: "Login successful", token };
} else {
ctx.status = 401;
ctx.body = { success: false, message: "Invalid credentials" };
}
}
```
#### 设置 Middleware
为了让后续路由能够访问到解码后的 payload 数据,在应用层面配置 `koa-jwt` 中间件是非常重要的。这一步骤使得经过认证的请求可以在上下文中找到已解析的身份信息[^1]。
```javascript
const Koa = require('koa');
const Router = require('@koa/router');
const jwt = require('koa-jwt');
const app = new Koa();
const router = new Router();
app.use(jwt({ secret: 'your_secret_key' }).unless({
path: [/^\/login/], // 排除不需要鉴权的路径
}));
router.get('/protected', async (ctx) => {
ctx.body = { msg: 'This is a protected route.', userId: ctx.state.user.id }; // 访问受保护资源
});
app.use(router.routes());
app.listen(3000);
console.log('Server running on port 3000...');
```
上述代码展示了如何利用 `koa-jwt` 来保护特定 API 路由免遭未经授权的访问尝试。当客户端发送包含有效 Bearer Token 的 HTTP 请求时,该 token 就会被自动提取、校验,并将其所含有的声明附加至当前请求对象(`context`)之中以便进一步操作使用。
阅读全文
相关推荐


















