在 Nestjs 中刷新令牌最有效的方法是什么 APi

What is the most effective way to refresh token in Nestjs APi

我正在使用需要每 24 小时刷新一次身份验证的第三方 API。身份验证端点 returns 令牌和到期日期。如果刷新没有在 24 小时内完成,那么我必须获得一个新令牌。所以我需要获取当前日期并将其与不到 24 小时的到期日期进行比较。

根据文档,建议将令牌保存在数据库中,然后将其用于每个请求。所以我必须手动传递ID来获取令牌。

  1. 有没有更好的方法。
  2. 我想在不到 24 小时内刷新令牌,也许 23 小时到到期日期的时间。我试图比较当前日期和到期日期,但 let esfgesrfsd 返回 Invalid Date

这是到期日期格式"2020-07-20T11:32:13.025Z" 这是当前日期格式 'Sat, 18 Jul 2020 20:48:45 GMT'

  async ManageAuth() {

        const tokenId = "5f1346459662c133f02hyt23";
        const savedToken = await this.AuthToken.findById(tokenId)

        let stringDate = savedToken.tokenExpirationTime.toString();
        var dateTime = new Date();
        let CurrentTime = dateTime.toUTCString();

        let esfgesrfsd = new Date(stringDate).toUTCString();

        if (esfgesrfsd < CurrentTime) {
            await this.RefreshAuthToken();
        }
        else if (esfgesrfsd > CurrentTime) {
            this.Auth()
        }
        return savedToken
    }


感谢@Frozn

我可以用下面的代码修复它。令牌将在 48 小时后过期,但我想在接下来的 24 小时之前重新授权,所以我必须扣除 26 小时。所以重新授权将每 22 小时发生一次。我仍然对更好的实现持开放态度

    async ManagePrimeTimeAuth() {

        const tokenId =process.env.token;
        const savedToken = await this.AuthToken.findById(tokenId)

        let DBExpirationDateTime = Date.parse(savedToken.tokenExpiration.toString());
        var CurrentdateTime = new Date();

        let CurrentdateTimeMinus2 = CurrentdateTime.setHours(CurrentdateTime.getHours() - 26);
        let CurrentdateTimeMinus2Con = new Date(CurrentdateTimeMinus2).toISOString();


        let ExpirationDateTime = new Date(DBExpirationDateTime);
        let CurrentDateTimeMinusTwoHr = new Date(CurrentdateTimeMinus2Con)


        if (ExpirationDateTime < CurrentDateTimeMinusTwoHr) {
            const Primetimeauth = await this.PrimetimeAuth()
            return Primetimeauth
        }
        else if (ExpirationDateTime > CurrentDateTimeMinusTwoHr) {
            return savedToken

        }
        return this.PrimeTimeRefreshAuthToken()

    }