Я использую 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);
Я не понимаю, потому что мой токен не нулевой
Печать моего значения маркеров: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJkeWxhbi5uYXRpZXJAYmx1ZXNvZnQ tZ3JvdXAuY29tIiwiZXh wIjoxNTQ1MjMyMTUxfQ. 4t7fCh3Ux8qJo8xVC3Hv sQKx3q0ulfOQclJmGf4v cAu77xoFwboPAjHil1AS fZRr_S7PviM354PdLgio PeiL4g
Пакет jsonwebtoken предназначен для использования на бэкенде. Для внешнего интерфейса вы должны использовать jwt-dcode, который разработан той же компанией (auth0), но намного меньше по размеру и предназначен для использования через интерфейс.





Предполагая, что ваш заголовок похож на 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);
Что печатает console.info (токен) после строки 2?