📅  最后修改于: 2023-12-03 14:52:54.526000             🧑  作者: Mango
在许多 Web 应用程序中,JWT(JSON Web Token)令牌已成为身份验证和授权的常见方式。然而,在客户端上对 JWT 令牌进行解码可能会出现一些挑战,因为所有信息都以 Base64 编码的形式存储,并且需要进行解析和处理。在本教程中,我们将学习如何在 Javascript 中解码 JWT 令牌。
JWT 令牌是由三个部分组成的字符串,用点分隔。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
这三部分的含义如下:
为了解码 JWT 令牌,我们需要使用 jwt-decode 库。该库可用于将 JWT 令牌的 Header 和 Payload 部分解码为 Javascript 对象。
安装 jwt-decode 库的方法非常简单。我们只需要在终端中运行以下命令:
npm install jwt-decode --save
在 React 中解码 JWT 令牌非常简单。我们只需要遵循以下步骤:
import jwt_decode from 'jwt-decode';
export default function MyComponent() {
const [decodedToken, setDecodedToken] = useState({});
...
}
const token = localStorage.getItem('token');
const decoded = jwt_decode(token);
setDecodedToken(decoded);
完整代码示例:
import React, { useState, useEffect } from 'react';
import jwt_decode from 'jwt-decode';
export default function MyComponent() {
const [decodedToken, setDecodedToken] = useState({});
useEffect(() => {
const token = localStorage.getItem('token');
if (token) {
const decoded = jwt_decode(token);
setDecodedToken(decoded);
}
}, []);
return (
<div>
<p>Username: {decodedToken.username}</p>
<p>Role: {decodedToken.role}</p>
</div>
);
}
以上代码将在组件挂载后自动从 localStorage 中获取令牌并将其解码为对象。
在本教程中,我们学习了如何在反应中解码 JWT 令牌。为了实现这一目标,我们使用了 jwt-decode 库并按照特定的步骤进行了实现。现在,我们已经解码了令牌,并且可以在 React 组件中使用其 Payload 部分中包含的声明。