解码Jwt令牌React

时间:2018-12-18 15:02:32

标签: reactjs jwt

我使用jsonwebtoken解码我的令牌,以查看其是否过期。但是,console.log返回null。

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

我不明白,因为我的令牌不为空

3 个答案:

答案 0 :(得分:1)

这可能很简单,只需删除粘贴的样本将留下的多余空间即可。授权标头为<scheme><space><value>,因此:

`var token = token.replace('Bearer ','');`

答案 1 :(得分:0)

假设标题为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.log("without leading space");
console.log(decode1);
// { sub: '1234567890', name: 'John Doe', iat: 1516239022 }

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

答案 2 :(得分:0)

似乎您正在使用JWT。要解码此类令牌,​​您可以简单地使用jwt-decode library。例如在ReactJS中:

import jwt from 'jwt-decode' // import dependency
...
// some logic
await 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());
  });