如何存储从OAuth中获取的access_token供以后使用?

时间:2013-08-04 19:19:44

标签: javascript node.js oauth pocket

我正在尝试使用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,但我实际上并不知道如何去做。我尝试过使用cookies,但这似乎不起作用。当然,我可能刚刚错误地实施了它们。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

存储访问令牌的方式通常取决于您将使用API​​的位置。

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

答案 1 :(得分:1)

你应该让饼干的东西起作用。选项2是使用localStorage但是如果你正在努力使用cookies我不会尝试沿着这条路走下去 - 它可以让你更好地控制令牌何时通过网络发送,但也需要更多的工作来使您的服务器端和客户端代码协调。