reactjs JWT标记(指定的标记无效)

h6my8fg2  于 2022-12-12  发布在  React
关注(0)|答案(5)|浏览(180)

我有模块来检查令牌的有效期是否已经过期。所以,如果令牌过期,它会自动页面将再次登录。
我已经编码,但他们是错误的,在我的控制台和我的网页加载了。
未捕获的无效令牌错误{消息:“指定的令牌无效”}

列表不工作

  • 我看了一些帖子,上面说需要把这个。{标题:真}
  • 需要指定本地存储是否具有令牌

这是我的代码:

if (localStorage.getItem("token") === null) {
        let token_expired = localStorage.getItem('token');
        let decoded = decode(token_expired, { header: true });
        let decode_string = decoded["exp"];
        var current_time = Date.now() / 1000;
        if(decode_string < current_time)
        {
            localStorage.clear();
        }
    }
hkmswyz6

hkmswyz61#

我认为你需要改变第一个条件,并为变量使用声明性名称。

const storedToken = localStorage.getItem("token");
if (storedToken){
   let decodedData = decode(storedToken, { header: true });
   let expirationDate = decodedData.exp;
    var current_time = Date.now() / 1000;
    if(expirationDate < current_time)
    {
        localStorage.removeItem("token");
    }
 }
vsmadaxz

vsmadaxz2#

我想你的令牌并不存在。
1.进入开发工具(ctrl +shift + i),然后
1.选择应用程序
1.在应用程序中,转至存储,然后
1.打开本地存储(双击本地存储),然后
1.清除本地存储

wgxvkvu9

wgxvkvu93#

这通常意味着你的jwt格式不正确。获取字符串形式的标记,访问jwt.io并将标记粘贴到其中,以查看主体结构,然后从那里继续调试

kjthegm6

kjthegm64#

正如Isaac所建议的,您的jwt格式不正确,因此会抛出错误,从而阻止代码的进一步执行。我建议将您的逻辑放在一个try catch块中,如下所示:

try {
    //what you are doing..
    if (localStorage.getItem('token') === null) {
      let token_expired = localStorage.getItem('token')
      let decoded = decode(token_expired, { header: true })
      let decode_string = decoded['exp']
      var current_time = Date.now() / 1000
      if (decode_string < current_time) {
        localStorage.clear()
      }
    }
  } catch (e) {
    localStorage.clear() //what you need to do incase the jwt is not valid
    console.log(e) //for your own debugging
  }
9lowa7mx

9lowa7mx5#

它可能是后端的一个有效负载,它只是一个字符串,一个数字,所以它不能解码出来。我把后端的有效负载变回一个对象,它工作了。enter image description here

相关问题