使用Twitter API,我正在尝试代表Twitter用户发布推文。我正在使用node和passport-twitter和twit模块。一些资源:我遵循了这个视频教程NodeJS和ExpressJS:使用Passport进行Twitter身份验证。教程的源代码在这里。Passport-twitter文档和twit文档。我已经成功地按照上面的教程通过passport-twitter进行了身份验证。
我还成功使用twit在我的twitter开发者账户上发布了帖子。然而,我在尝试代表另一个用户发布推文时遇到了问题。我需要获取该用户的访问令牌和访问令牌密钥,然后使用这些信息向Twitter API发送一个帖子请求。我不确定在passport-twitter代码中应该放置这个帖子请求。我尝试将其放在第二个路由中,即Twitter在用户登录后重定向到的URL中。
我还成功使用twit在我的twitter开发者账户上发布了帖子。然而,我在尝试代表另一个用户发布推文时遇到了问题。我需要获取该用户的访问令牌和访问令牌密钥,然后使用这些信息向Twitter API发送一个帖子请求。我不确定在passport-twitter代码中应该放置这个帖子请求。我尝试将其放在第二个路由中,即Twitter在用户登录后重定向到的URL中。
app.get('/twitter/login', passport.authenticate('twitter'))
app.get('/twitter/return', passport.authenticate('twitter', {
failureRedirect: '/'
}), function(req, res) {
//Post using twit
//grab access token and access token secret from the request query
const access_token = req.query.oauth_token;
const access_token_secret = req.query.oauth_verifier;
//set the configurations with the access token and access token secret that we just got
const config = {
consumer_key: <consumer key here>,
consumer_secret: <consumer secret here>,
access_token,
access_token_secret,
timeout_ms: 60*1000,
strictSSL: true
}
//pass in the configurations
var T = new Twit(config);
//post
T.post('statuses/update', { status: 'hello world!' }, function(err, data, response) {
if (err)console.log("oops, didn't tweet: ", err.message);
})
res.redirect('/');
})
但是我遇到了一个错误:无效或过期的令牌。
我原本以为会成功,因为已经进行了身份验证。
这是我第一次使用OAuth,也许我对它的工作方式有所误解。
我应该把这个请求放在哪里?
更新:
我尝试使用我的开发者帐户、开发者帐户的访问令牌和密钥进行发布。它起作用了。这让我相信用户的访问令牌和密钥存在问题。
我想我知道部分情况了。
我假设在请求查询对象中找到的oauth_verifier
属性是访问令牌密钥。
const access_token_secret = req.query.oauth_verifier;
但是现在我不认为oauth_verifier
与访问令牌密钥相同。oauth_verifier
的字符数比我的开发帐户的访问令牌密钥少。因此,数据类型似乎不同。
但现在我正在尝试找出用户的访问令牌密钥在哪里?请求查询对象 (req.query
) 中只有两个属性:
oauth_token
oauth_verifier
用户的访问令牌密钥在哪里?