jwt 中的 decode 和 verify 的区别
jwt.decode()
和jwt.verify()
都是用于操作 JSON Web Token (JWT) 的方法,但它们的功能和作用有所不同:
1. jwt.decode(token)
jwt.decode()
方法用于解码 JWT 令牌,并返回一个包含解码信息的对象。- 这个方法只是简单地解析 JWT 令牌中的各个部分,提取出其中包含的基本信息,如令牌的头部、负载(payload)或签名算法等。
jwt.decode()
不会进行任何验证,仅提供对 JWT 结构的基本访问,提取数据并返回给您。
2. jwt.verify(token, mySecretKey)
jwt.verify()
方法用于验证 JWT 令牌的有效性,并在验证通过时返回解码后的令牌信息。- 它会验证 JWT 的数字签名是否正确,同时也会检查令牌是否过期(如果设置了过期时间)以及其他相关的验证设定。
- 需要传入密钥(
mySecretKey
)来验证数字签名。 - 如果验证失败,
jwt.verify()
会抛出一个错误,您可以捕获该错误并进行适当的处理。
综上所述,jwt.decode()
方法主要用于提取 JWT 令牌中的信息,而jwt.verify()
方法则用于验证 JWT 令牌的有效性和完整性。
示例代码
以下是示例代码:
javascript
const jwt = require("jsonwebtoken");
const { mySecretKey } = require("./../utils/config");
const token = "yourJWTTokenHere";
// 解码 JWT 令牌,获取存储的信息
const decoded = jwt.decode(token);
console.log("Decoded Token:", decoded);
try {
// 验证 JWT 令牌的有效性
const verifiedToken = jwt.verify(token, mySecretKey);
console.log("Verified Token:", verifiedToken);
} catch (error) {
console.error("JWT verification failed:", error.message);
}
在上面的示例中,使用jwt.decode()
解码 JWT,并将解码后的信息存储在decoded
变量中。然后,使用jwt.verify()
验证 JWT 令牌的有效性,并将验证通过后的信息存储在verifiedToken
变量中。如果验证失败,则捕获错误并进行适当的处理。