在 Nestjs 中刷新令牌最有效的方法是什么 APi
What is the most effective way to refresh token in Nestjs APi
我正在使用需要每 24 小时刷新一次身份验证的第三方 API。身份验证端点 returns 令牌和到期日期。如果刷新没有在 24 小时内完成,那么我必须获得一个新令牌。所以我需要获取当前日期并将其与不到 24 小时的到期日期进行比较。
根据文档,建议将令牌保存在数据库中,然后将其用于每个请求。所以我必须手动传递ID来获取令牌。
- 有没有更好的方法。
- 我想在不到 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()
}
我正在使用需要每 24 小时刷新一次身份验证的第三方 API。身份验证端点 returns 令牌和到期日期。如果刷新没有在 24 小时内完成,那么我必须获得一个新令牌。所以我需要获取当前日期并将其与不到 24 小时的到期日期进行比较。
根据文档,建议将令牌保存在数据库中,然后将其用于每个请求。所以我必须手动传递ID来获取令牌。
- 有没有更好的方法。
- 我想在不到 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()
}