![](/img/trans.png)
[英](Retool) Make a ".txt" file to GCS but I got the error "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."
[英]DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. Payload size a problem?
编辑:当我减少有效载荷大小时它会起作用......为什么?
这到底是怎么回事? 为什么它突然停止工作?
我正在尝试解码 JWT 令牌,但出现错误。 甚至 VS Code 也会显示一个。
The signature '(data: string): string' of 'atob' is deprecated.
atob
怎么可能在另一个项目中工作,而不是在这个项目中?
let payload = tokenRaw.split(".")[1];
let decoded = atob(payload);
let token = JSON.parse(decoded);
这是 JWT 的创建。
不工作
let token = jwt.sign(
{
username: req.body.username,
companyKey: user.companyKey,
companyName: user.companyName,
discountGroup: user.discountGroup,
isAdmin: false,
},
config.tokenSecret,
{
expiresIn: tokenExpirationSeconds,
}
);
在职的
let token = jwt.sign(
{
username: req.body.username,
companyKey: user.companyKey,
},
config.tokenSecret,
{
expiresIn: tokenExpirationSeconds,
}
);
看来您的帖子实际上有两个问题。 VS Code 显示的那个...
'atob' 的签名 '(data: string): string' 已被弃用。
...与运行时无关,因此是常数。 在母舰本身打开的一张票中描述了这种情况的根本原因:
问题是这两个“重载”在签名上是相同的,并且从 node中选择了已弃用的一个,因为它是最后加载的。 如果您正在编写 DOM 代码,您真的应该尽量避免在您的程序中使用节点类型,但我们痛苦地意识到这说起来容易做起来难,有时甚至是不可能的。
建议的解决方案是改用window.atob()
,以便 TS 清楚地知道节点的签名不应该适用。
实际上成为标题的问题 -
要解码的字符串未正确编码。
...不是静态的,取决于有效负载的准备方式。 它似乎与此线程中描述的问题有些相关,但没有确切的输入,就很难说。 例如,它也可能与请求参数的不当处理有关。
因此,建议以一种或另一种方式将此代码块包装到try-catch
。 例如,如果它是一个函数......
function decodeRawToken(tokenRaw) {
try {
let payload = tokenRaw.split(".")[1];
let decoded = atob(payload);
let token = JSON.parse(decoded);
return token;
}
catch(e) {
console.error(`Failed to process token: ${tokenRaw}`);
// you can send this token to some server-side logger instead
}
}
...以便您始终可以检测哪些令牌给您的代码带来了问题 - 并与他们的发起者协商他们的生成出了什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.