【问题标题】:Javascript Check if the Date is already Expired in Token [duplicate]Javascript检查令牌中的日期是否已经过期[重复]
【发布时间】:2019-03-27 07:35:32
【问题描述】:

早安,

我在身份验证中使用 jwt。我已经解码了我的令牌,但问题是,我想检查令牌 exp 是否已经过期。

var decodedToken = localStorage.getItem('user_token');

console.log(decodedToken.exp) // writes 1540360205

提前谢谢你。

【问题讨论】:

    标签: javascript date jwt


    【解决方案1】:

    您的 JWT 令牌的 exp 声明似乎带有 UNIX 时间戳,以秒为单位。要检查给定的 JWT 是否已过期,您只需将当前日期作为 UNIX 时间戳进行比较:

    var decodedToken = localStorage.getItem('user_token');
    if (decodedToken.exp < new Date()/1000) {
        console.log("EXPIRED");
    }
    

    【讨论】:

    • @erhan355 JWT 由同一台服务器发布和检查/接收,因此时区在这里应该没有任何问题。而且,根据设计,用户无法在服务器不知道已被黑客入侵的情况下更改 JWT。
    • 如果您还有其他需求未通过此问题解决并已接受的答案,您应该打开一个新问题,而不是在此处用 cmets 说明您的要求。
    • @erhan355 我现在明白你的疑问了。请记住,这个问题实际上并没有说正在使用刷新令牌(它们不一定是)。为了解决您的疑问,服务器和客户端之间应该有一个特定时区的合同,例如GMT,用于exp 中的过期时间戳。然后,客户端可以根据需要进行调整,以确定何时应该使用刷新令牌来请求新的访问和刷新令牌。
    • 是的,你找到我了。谢谢你的澄清。
    【解决方案2】:

    这应该会为您提供当地时间,然后您可以将其与当前日期和时间进行比较,并检查令牌是否已过期

    var tokenDate = new Date(parseInt(localstorage.getItem('user_token')) * 1000)
    

    【讨论】:

    • 不需要parseInt,乘法运算符会将结果强制为数字。
    【解决方案3】:

    我假设 decodedToken.exp 的值是令牌到期日期的 UNIX 时间戳,因此您可以执行以下操作:

    ...
    var date = new Date();
    // date.getTime() is in milliseconds and thus we've got to divide by 1000
    if(decodedToken.exp<date.getTime()/1000){
        console.log('The token has expired');
    }else{
        console.log('The token is still valid');
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用Date.now() 进行如下比较

           decodedToken.exp * 1000 < Date.now()
      

      PS:我将 exp * 1000 乘以毫秒。

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 2018-03-12
        • 2018-03-24
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多