介绍
Token 认证是 Web 应用程序中常用的一种认证方式,它把认证信息存储在 Token 中,而不是存储在会话中。这种方式可以使客户端在请求中携带认证信息,在服务端无状态的处理请求,从而提高了应用程序的可伸缩性。
本文主要讲解如何使用 Koa 框架结合 jsonwebtoken 库实现用户 Token 认证。
安装
在开始之前,需要安装以下依赖:
Koa:
npm install koa
jsonwebtoken:
npm install jsonwebtoken
实现
下面是实现 Token 认证的步骤:
1. 生成 Token
在用户登录成功后,服务器需要生成 Token 并返回给客户端,客户端在后续请求中携带该 Token。
const jwt = require('jsonwebtoken'); const secret = 'your-secret-key'; const token = jwt.sign({ id: 'user-id' }, secret); // 返回给客户端的 token,可以通过 cookie、localStorage 等方式保存
其中,jwt.sign()
方法用来生成 Token,第一个参数是要存储在 Token 中的数据,第二个参数是私有密钥,可以通过环境变量等方式存储。
2. 验证 Token
在客户端发送请求时,需要在请求头部中携带 Token,服务器需要对 Token 进行验证。
// javascriptcn.com 代码示例 const jwt = require('jsonwebtoken'); const secret = 'your-secret-key'; const token = ctx.headers.authorization.split(' ')[1]; try { const decoded = jwt.verify(token, secret); // 验证成功,继续处理请求 } catch (e) { ctx.status = 401; ctx.body = 'Unauthorized'; }
其中,ctx.headers.authorization
用来获取请求头部中的 Authorization 字段,jwt.verify()
方法用来验证 Token 是否过期或被篡改,如果验证成功则返回原始数据,否则抛出异常。
3. 中间件实现
为了方便实现 Token 认证,可以把验证逻辑封装成一个中间件。
// javascriptcn.com 代码示例 const jwt = require('jsonwebtoken'); const secret = 'your-secret-key'; function authenticateToken(ctx, next) { const token = ctx.headers.authorization.split(' ')[1]; if (!token) { ctx.status = 401; ctx.body = 'Unauthorized'; return; } try { const decoded = jwt.verify(token, secret); ctx.user = decoded; next(); } catch (e) { ctx.status = 401; ctx.body = 'Unauthorized'; } }
在 Koa 应用中使用该中间件即可实现 Token 认证。
const Koa = require('koa'); const app = new Koa(); app.use(authenticateToken); // 其他处理中间件 app.listen(3000);
总结
本文介绍了如何使用 Koa 框架结合 jsonwebtoken 库实现用户 Token 认证,并提供了完整的代码示例。Token 认证是一种常用的认证方式,它使得服务器无需存储会话状态,提高了应用程序的可伸缩性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6540b7ce7d4982a6eba42386