这意味着令牌已过期,需要刷新。如果您想在没有用户交互的情况下刷新它,则需要在refresh_token
最初获取令牌时返回一个。
以下是刷新它的方法:
function refreshTokenIfNeeded(tokenObj){
let accessToken = oauth2.accessToken.create(tokenObj);
const EXPIRATION_WINDOW_IN_SECONDS = 300;
const { token } = accessToken;
const expirationTimeInSeconds = token.expires_at.getTime() / 1000;
const expirationWindowStart = expirationTimeInSeconds - EXPIRATION_WINDOW_IN_SECONDS;
const nowInSeconds = (new Date()).getTime() / 1000;
const shouldRefresh = nowInSeconds >= expirationWindowStart;
let promise = Promise.resolve(accessToken)
if (shouldRefresh) {
console.log("outlook365: token expired, refreshing...")
promise = accessToken.refresh()
}
return promise
}
tokenObj
您存储在数据库中的令牌对象在哪里。确保它也有expires_at
或将以其他方式oauth2.accessToken.create()
创建它并从当前时刻开始计算。
更多细节可以在本教程和这个 github repo中找到(这是上面代码的来源)