Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Erro para decodificar um token

Eu estou usando esse trecho de código para decodificar um token, o token é válido, eu testei no https://jwt.io/ Se quiser conferir o token, é esse: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjI1NzlkMTVmLWY0ZjEtNGEwOS04MGRjLTk3OTdiZmZmMzg4NyIsInJvbGUiOiJQQUNJRU5URSIsImlhdCI6MTcwMjUwNzE1NiwiZXhwIjoxNzAyNTkzNTU2fQ.nmG6Sv5cHED4d75NumxbmhMExArJpRCc84AkXG8Sm1o

import { jwtDecode } from "jwt-decode";

interface tokenPayload {
  id: string;
}

const tokenDecodificado = jwtDecode(token) as tokenPayload;
return tokenDecodificado.id;

O log de erro é esse: Error decoding token: [InvalidTokenError: Invalid token specified: invalid base64 for part #2 (Property 'atob' doesn't exist)]

3 respostas

Olá, Cristian!

O erro que você está recebendo indica que a função 'atob' não existe. Isso ocorre porque 'atob' é uma função do ambiente do navegador e não está disponível no React Native.

Para tentar resolver isso, você pode tentar usar a biblioteca 'react-native-base64' que fornece funções 'atob' e 'btoa' para o React Native. Primeiro, instale a biblioteca com o seguinte comando:

npm install --save react-native-base64

Depois, importe 'base64' no seu arquivo e use 'base64.decode' para decodificar seu token:

import base64 from 'react-native-base64';

let decodedToken = base64.decode(token);

Seu código final ficaria assim:

import base64 from 'react-native-base64';
import { jwtDecode } from "jwt-decode";

interface tokenPayload {
  id: string;
}

let decodedToken = base64.decode(token);
const tokenDecodificado = jwtDecode(decodedToken) as tokenPayload;

return tokenDecodificado.id;

Espero ter ajudado e bons estudos!

Esse código que você sugeriu base64.decode(token) tá dando erro, tem alguma outra solução ?

let decodedToken = base64.decode(token);

Possible Unhandled Promise Rejection (id: 0): Error: There were invalid base64 characters in the input text. Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '=' Expect errors in decoding. Error: There were invalid base64 characters in the input text. Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '=' Expect errors in decoding.

solução!

Consegui resolver! O jwt-decode não tava conseguindo utilizar o 'atob', então para resolver eu referenciei a biblioteca manualmente no meu projeto e funcionou. Só foi necessário colocar o seguinte import:

import "core-js/stable/atob";