EDITAR: Funciona cuando reduzco el tamaño de la carga útil... ¿Por qué?
¿Qué diablos está pasando? ¿Por qué de repente dejó de funcionar?
Estoy tratando de decodificar un token JWT y aparece un error. Incluso VS Code muestra uno.
The signature '(data: string): string' of 'atob' is deprecated. ¿Cómo es posible que atob trabaje en otro proyecto y no en este?
let payload = tokenRaw.split(".")[1]; let decoded = atob(payload); let token = JSON.parse(decoded);Aquí está la creación de JWT.
No funciona
let token = jwt.sign( { username: req.body.username, companyKey: user.companyKey, companyName: user.companyName, discountGroup: user.discountGroup, isAdmin: false, }, config.tokenSecret, { expiresIn: tokenExpirationSeconds, } );laboral
let token = jwt.sign( { username: req.body.username, companyKey: user.companyKey, }, config.tokenSecret, { expiresIn: tokenExpirationSeconds, } );Parece que hay dos problemas en tu publicación en realidad. El mostrado por VS Code...
La firma '(data: string): string' de 'atob' está en desuso.
... no tiene nada que ver con el tiempo de ejecución y, por lo tanto, es constante. La causa raíz de esto se describe en un boleto abierto en la propia nave nodriza :
El problema es que las dos "sobrecargas" son idénticas en la firma, y la obsoleta del nodo se selecciona porque se cargó en último lugar. Si está escribiendo código DOM, realmente debería tratar de evitar tener tipos de nodos en su programa, pero somos muy conscientes de que esto es mucho más fácil decirlo que hacerlo y, a veces, imposible.
La solución sugerida es usar window.atob() en su lugar, para que TS sepa claramente que la firma del Nodo no debería ser aplicable.
El número que en realidad hizo un título -
La cadena a decodificar no está codificada correctamente.
... no es estático, y depende de cómo se prepare exactamente la carga útil. Parece estar algo relacionado con el problema descrito en este hilo , pero sin tener una entrada exacta, es difícil saberlo. También podría estar relacionado con el procesamiento inadecuado de los parámetros de solicitud, por ejemplo.
Entonces, la sugerencia es envolver este bloque de código en try-catch una forma u otra. Por ejemplo, si es una función...
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 } }... para que siempre pueda detectar qué tokens le dieron problemas a su código, y negociar con sus creadores qué está mal con su generación.