解码 jwt 令牌

Decoding jwt token

我正在尝试解码我​​在登录时收到的 jwt 令牌,但它 returns ''null'' 在 console.log.

这是我解码的代码:

import jwt from 'jsonwebtoken';

    function loginRequest(){
        const token = axios.post('https://afe2021fitness.azurewebsites.net/api/Users/login', 
        state).then(data => {localStorage.setItem('jwtToken', data.data.jwt);
        console.log(data.data.jwt)});

        console.log(jwt.decode(token));
    }

而且我也尝试了 jwt-decode 库中的解码器,但没有任何运气:

var decoded = jwtdecode(token);

上面写着“未捕获(承诺)n {message: 'Invalid token specified'}”

问题是您在初始化变量之前尝试使用 token 变量。您还需要在从 axios.post 返回 Promise 之前使用 await。现在您必须在调用 loginRequest 之前使用 await。所以最终代码如下所示:

import jsonwebtoken from "jsonwebtoken";

async function loginRequest() {
  const response = await axios.post("https://afe2021fitness.azurewebsites.net/api/Users/login", state)
  const { jwt } = response.data
  localStorage.setItem("jwtToken", jwt);
  console.log(jwt);
  console.log(jsonwebtoken.decode(jwt));
}

您应该将 console.log(jwt.decode(token)) 移动到 then 块内或使用 async 函数:

import jwt from 'jsonwebtoken';

async function loginRequest() {
  try {
    const { data } = await axios.post(
      'https://afe2021fitness.azurewebsites.net/api/Users/login',
      state
    );
    const token = data.jwt;
    localStorage.setItem('jwtToken', token);
    console.log(token);

    console.log(jwt.decode(token));
  } catch (err) {
    console.log(err);
  }
}