鉴权也叫身份认证,指验证用户是否有系统的访问权限。就很像我们经常乘坐动车的票据(对应的标识,一定的时间范围)。
token 流程
- 用户登录:用户提供凭据(如用户名和密码)进行登录。
- 服务器验证凭据:服务器验证提供的凭据,如果通过验证,则生成一个包含用户唯一标识的 token。
- 将 token 与用户关联起来:服务器将生成的 token 与用户在数据库中的唯一标识关联起来。
- 发送 token 到客户端:服务器将生成的 token 发送给客户端(通常是通过设置在响应的 header 或 body 中)。
- 客户端持有 token:客户端接收并保存 token。
- 访问受保护资源:在后续的请求中,客户端发送包含 token 的请求到服务器。
- 校验 token:服务器接收到包含 token 的请求后,对 token 进行校验,验证 token 的有效性和真实性。
- 校验 token:服务器接收到包含 token 的请求后,对 token 进行校验,验证 token 的有效性和真实性。
const jwt = require('jsonwebtoken');
const secretKey = 'your_secret_key';
// 假设从数据库中查询到了用户的唯一标识
const userId = 123;
// 生成 token,将用户唯一标识包含在其中
const token = jwt.sign({ userId: userId }, secretKey);
// 将生成的 token 发送给客户端(例如,包含在响应的 header 或 body 中)
const jwt = require('jsonwebtoken');
const secretKey = 'your_secret_key';
// 假设客户端将 token 包含在请求的 header 中
const token = // 从请求 header 中获取 token
// 校验 token,获取其中的用户唯一标识
const decoded = jwt.verify(token, secretKey);
const userId = decoded.userId;
// 使用 userId 去查询数据库或其他存储,获取特定用户的数据
// 这里使用伪代码模拟从数据库中获取用户数据
const userData = db.query('SELECT * FROM users WHERE id = ?', [userId]);
// 返回用户数据给客户端
res.json(userData);
在实际应用中,步骤 3 和 7 是最关键的。在步骤 3 中,服务器需要将 token 与用户在数据库中的唯一标识关联起来,以便后续可以根据 token 来获取对应用户的数据。在步骤 7 中,服务器需要对接收到的 token 进行验证,以确保 token 是有效和真实的,并使用其中的用户唯一标识来获取用户数据。
这个工作流程通常需要结合使用 JSON Web Tokens(JWT)、数据库查询和服务器端逻辑来实现。