gpt4 book ai didi

node.js - 如何在 Node.js 中跨 API 调用缓存 oAuth token

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:23 25 4
gpt4 key购买 nike

我已经能够设置我的代码,以便当您向 api 函数发出请求时,oAuthHandler 函数会自动为您处理身份验证。但我遇到的问题是,我找不到跨多个调用缓存 token 的方法,因此我仅在 token 已过期时请求新 token 。

我已将所有相关代码文件和我的测试文件的示例放在以下 GIST 中。我只从文件中删除了服务器连接详细信息。要点:https://gist.github.com/jgpeak/56e82c58b368429d4aad

最佳答案

我发现我在 token 缓存方面做错了什么。我不需要在模块导出外部启动变量,而是需要在第一个导出的函数内启动它,以便它绑定(bind)到我创建的实例,以传递给下面更新的其他 api 方法 oAuthHandler。

(function() {
'use strict';

//Required Modules
// ===============
const request = require('./requestHandler');
const cache = require('memory-cache');

//Hidden Variables
// ===============

module.exports = (oAuth) => {
var cachedToken = null;
return (processor, options, postData) => new Promise(function (resolve, reject) {

var errorProcessor = (err) => {
//If authorization failure refresh token and try one more time
if(err.statusCode && err.statusCode === 401){
return oAuth.getToken()
.then((token)=>{
cachedToken = token;
return request(token, processor, options, postData);
})
.then((response) => resolve(response))
.catch((err) => {
reject(err);
});
}
return reject(err);
};

if(cachedToken){
return request(cachedToken, processor, options, postData)
.then((response) => resolve(response))
.catch(errorProcessor);
}
else {
return oAuth.getToken()
.then((token)=>{
cachedToken = token;
return request(token, processor, options, postData);
})
.then((response) => resolve(response))
.catch(errorProcessor);
}
});
};

}());

关于node.js - 如何在 Node.js 中跨 API 调用缓存 oAuth token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com