Расшифровать токен Jwt React

Я использую jsonwebtoken для декодирования моего токена, чтобы узнать, истек ли он или нет. Но console.info возвращает значение null.

 var token = response.headers.authorization;
 token = token.replace('Bearer','');
 var jwt = require('jsonwebtoken');
 var decoded = jwt.decode(token);
 console.info(decoded);

Я не понимаю, потому что мой токен не нулевой

Что печатает console.info (токен) после строки 2?

Damien Monni 18.12.2018 16:07

Печать моего значения маркеров: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJkeWxhbi5uYXRpZXJAYmx1ZXNvZnQ tZ3JvdXAuY29tIiwiZXh wIjoxNTQ1MjMyMTUxfQ. 4t7fCh3Ux8qJo8xVC3Hv sQKx3q0ulfOQclJmGf4v cAu77xoFwboPAjHil1AS fZRr_S7PviM354PdLgio PeiL4g

dna 18.12.2018 16:09

Пакет jsonwebtoken предназначен для использования на бэкенде. Для внешнего интерфейса вы должны использовать jwt-dcode, который разработан той же компанией (auth0), но намного меньше по размеру и предназначен для использования через интерфейс.

Tamer Shlash 13.01.2020 08:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
13
3
37 795
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Предполагая, что ваш заголовок похож на Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c то после строки 2 у вас есть ведущий пробел. В приведенном ниже примере показано различие между ведущими пробелами. Обрезка ведущего места должна решить вашу проблему.

var jwt = require("jsonwebtoken");

var token1 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
var token2 = " eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";

var decode1 = jwt.decode(token1);
var decode2 = jwt.decode(token2);

console.info("without leading space");
console.info(decode1);
// { sub: '1234567890', name: 'John Doe', iat: 1516239022 }

console.info("with leading space");
console.info(decode2);
// null

Это может быть так же просто, как удалить лишнее пространство, которое оставит ваш вставленный образец. Заголовок авторизации - <scheme><space><value>, поэтому:

`var token = token.replace('Bearer ','');`
Ответ принят как подходящий

Похоже, вы используете JWT. Чтобы декодировать этот тип токена, вы можете просто использовать библиотека jwt-decode. Например, в ReactJS:

import jwt from 'jwt-decode' // import dependency
...
// some logic
axios.post(`${axios.defaults.baseURL}/auth`, { email, password })
    .then(res => {
      const token = res.data.token;
      const user = jwt(token); // decode your token here
      localStorage.setItem('token', token);
      dispatch(actions.authSuccess(token, user));
    })
    .catch(err => {
      dispatch(actions.loginUserFail());
  });

Попробуйте jwt-decode в библиотеке React

Установить библиотеку jwt-decode

npm i jwt-decode

Образец кода

import jwt_decode from "jwt-decode";

const token = "eyJ0eXAiO.../// jwt token";
const decoded = jwt_decode(token);
console.info(decoded); 

Другие вопросы по теме