[英](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.