我的应用目前正在 expo 上运行,我需要一种方法来解码从后端收到的 JWT token 。当我使用 jwt.io
时,它不需要 key 来解码,但我似乎找不到支持 expo 的库不需要 key 来解码。我尝试使用下面的代码在没有库的情况下对其进行解码,但它不起作用:-
JSON.parse(new Buffer(token.split(‘.’)[1], ‘base64’.toString()));
我曾尝试使用一些 expo 库,但我发现的所有内容都需要一个 key 来解码,如果我将一个空字符串传递给该 key ,它就不会解码。 我也试过不用库解码
通过 jwt.io
解码我的 JWT token 后的预期结果是下面的对象:
{
"id": "5ce667c89133fd61e7f08c53",
"name": "TEST Group",
"username": "chia.wq@redtech.my",
"type": "G",
"iat": 1560152565
}
有没有其他方法可以让我在没有 key 的情况下通过使用或不使用 Expo 上的 React Native 中的库进行解码?
最佳答案
JWT key 只是在这里签署 token ,所以 yes 可以在没有 key 的情况下提取数据。
您唯一缺少的是缓冲区不是以 Base64 编码,而是以“URL Base64”编码。
在将 token 部分传递给 Buffer
之前,您必须将所有“-”替换为“+”,将所有“_”替换为“/”。
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
const parts = token.split('.').map(part => Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString());
const payload = JSON.parse(parts[1]);
console.log('JWT payload', payload);
关于react-native - 在 React Native Expo 应用程序中解码没有 key 的 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546048/