2

我正在尝试使用 Node.js 从 Pocket API 获取和存储访问令牌。我能够获取请求令牌,重定向到 Pocket 登录页面,重定向回我的站点,最后能够将请求令牌交换为访问令牌。

但这就是我的问题所在。我不知道我应该如何实际存储令牌,没有它我无法进行 API 调用(当然)。以下是相关代码:

//called when Pocket API redirects back to /getAccessToken
function getAccessToken(response, requestToken) {
    restler.post("https://getpocket.com/v3/oauth/authorize", {
        headers: { "Content-Type" : "application/json",
                   "X-Accept" : "application/json" },
        data : JSON.stringify({consumer_key:CONSUMER_KEY,code:requestToken})
    }).on("complete", function(data, res) {
        if(res.statusCode == 200) {
            var accessToken = data.access_token;
            console.log("Access granted: " + accessToken);
            //BUT HOW DO I STORE THE ACCESS TOKEN FOR USE OF API CALLS ??
        }
        response.writeHead(307, {Location: DNS}); //go back to site
        response.end();
    });

};

我在想我应该将 accessToken 存储在客户端,但我实际上并不知道如何去做。我尝试过使用 cookie,但这似乎不起作用。当然,我可能只是错误地实施了它们。

非常感谢您的帮助。

4

2 回答 2

2

您存储访问令牌的方式通常取决于您将在何处使用 API。

我通常喜欢将令牌保存在与之关联的用户文档的数据库(如 MongoDB)中,然后我的 Web 客户端可以 ping 我的服务器(通过 RESTful 端点),如果它需要任何令牌。这样,如果用户清除了浏览器上的所有状态,您就不必再次完成整个 OAuth 流程。

于 2013-08-04T20:19:58.090 回答
1

你可能应该让 cookie 工作。选项 2 是使用localStorage,但如果您在使用 cookie 时遇到困难,我不会尝试走这条路——它可以让您更好地控制令牌何时通过网络发送,但还需要做更多工作才能使您的服务器端和客户端代码协调。

于 2013-08-04T19:49:14.080 回答