Node.js Instapaper API&;Javascript-XAuth
我今天大部分时间都在尝试实现Instapaper的XAuth API。我甚至还没有拿到oauth代币 知道我做错了什么吗? 我正在使用node.js和oauth模块。我的理解是,我需要将用户名、密码、amd模式作为额外参数传递。oauth模块应该负责所有oauth参数。但事实并非如此。代码如下:Node.js Instapaper API&;Javascript-XAuth,node.js,oauth,xauth,instapaper,Node.js,Oauth,Xauth,Instapaper,我今天大部分时间都在尝试实现Instapaper的XAuth API。我甚至还没有拿到oauth代币 知道我做错了什么吗? 我正在使用node.js和oauth模块。我的理解是,我需要将用户名、密码、amd模式作为额外参数传递。oauth模块应该负责所有oauth参数。但事实并非如此。代码如下: var OAuth = require('oauth').OAuth; var oauth = new OAuth( '', 'https://www.instapaper.com/api/1
var OAuth = require('oauth').OAuth;
var oauth = new OAuth(
'',
'https://www.instapaper.com/api/1/oauth/access_token',
'CONSUMER_KEY',
'CONSUMER_SECRET',
'1.0',
null,
'HMAC-SHA1',
null
);
var extra = {
'x_auth_username': 'USERNAME',
'x_auth_password': 'PASSWORD',
'x_auth_mode': 'client_auth'
};
var hello = oauth._prepareParameters('', '', 'POST', 'https://www.instapaper.com/api/1/oauth/access_token', null);
var url = 'https://www.instapaper.com/api/1/oauth/access_token';
var f = true;
for (var i in hello) {
if (f) {
url += '?';
f = false;
} else {
url += '&';
}
url += hello[i][0] + '=' + hello[i][1];
}
console.log(url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=')
oauth._performSecureRequest('', '', "POST", url+'&x_auth_mode=client_auth&x_auth_username=&x_auth_password=', null, null, null, function(error, data, response) {
console.log(error, data)
});
它返回这个:
{ statusCode: 401,
data: 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]' } 'oauth_signature [pWRf4W9k9nogID/O90Ng29bR2K0=] does not match expected value [eqJ8zD1bKeUa3InpDyegGDAbSnM=]'}
因此,我不确定这是否是
oauth
模块的错误,或者Instapaper的API在解析Authorization
标题时过于严格,但我不得不在逗号后添加一个空格作为标题分隔符。无论如何,这似乎导致了所有问题(400个错误)
oauth当前将标头构建为:
需要
我修改了oauth.js
文件来反映这一点。
在行尾的逗号后添加空格
以下是我的工作客户示例:
var OAuth = require('oauth').OAuth;
var consumerKey = 'chill';
var consumerSecret = 'duck';
var oa = new OAuth(
null,
'https://www.instapaper.com/api/1/oauth/access_token',
consumerKey,
consumerSecret,
'1.0',
null,
'HMAC-SHA1'
);
var x_auth_params = {
'x_auth_mode': 'client_auth',
'x_auth_password': 'yourpass',
'x_auth_username': 'yourusername@whatever.com'
};
oa.getOAuthAccessToken(null, null, null, x_auth_params, function (err, token, tokenSecret, results) {
// CAN HAZ TOKENS!
console.log(token);
console.log(tokenSecret);
// ZOMG DATA!!!
oa.get("https://www.instapaper.com/api/1/bookmarks/list", token, tokenSecret, function (err, data, response) {
console.log(data);
});
});
希望这有帮助 Derek的答案是正确的,因为缺少空格是问题所在,但是您不需要编辑
oauth.js
创建OAuth客户端后,只需设置分隔符字符串:
var OAuth = require('oauth').OAuth;
var oa = new OAuth({...});
oa._oauthParameterSeperator = ', ';
(是的,“separator”,模块代码中有一个输入错误)我仍然在为这个问题绞尽脑汁。请帮帮我,你有没有试过?发布一个有效的解决方案,或将一个解决方案标记为正确答案将是灰色的。这仍然是一个“有效”的样本吗?似乎它不起作用了,因为“getOAuthAccessToken”的签名已经更改,除非我遗漏了什么。Paul(以及所有和我一样面临相同问题的人),您可以使用
getOAuthRequestToken(x_auth_参数,回调)
(使用节点oauth v0.9.8测试)。仍然需要修复授权标头中缺少空格的问题。但是,在创建新的OAuth实例时,一定要将requestUrl设置为(tohttps://www.instapaper.com/api/1/oauth/access_token
)。
authHeader+= "" + this._encodeData(orderedParameters[i][0])+"=\""+ this._encodeData(orderedParameters[i][1])+"\", ";
var OAuth = require('oauth').OAuth;
var consumerKey = 'chill';
var consumerSecret = 'duck';
var oa = new OAuth(
null,
'https://www.instapaper.com/api/1/oauth/access_token',
consumerKey,
consumerSecret,
'1.0',
null,
'HMAC-SHA1'
);
var x_auth_params = {
'x_auth_mode': 'client_auth',
'x_auth_password': 'yourpass',
'x_auth_username': 'yourusername@whatever.com'
};
oa.getOAuthAccessToken(null, null, null, x_auth_params, function (err, token, tokenSecret, results) {
// CAN HAZ TOKENS!
console.log(token);
console.log(tokenSecret);
// ZOMG DATA!!!
oa.get("https://www.instapaper.com/api/1/bookmarks/list", token, tokenSecret, function (err, data, response) {
console.log(data);
});
});
var OAuth = require('oauth').OAuth;
var oa = new OAuth({...});
oa._oauthParameterSeperator = ', ';