我使用Twitter API,试图代表Twitter用户发布推文。
我正在使用node以及passport-twitter和twit模块。
一些资源:
- 我关注了此视频教程NodeJS and ExpressJS: Using Twitter authentication via Passport。
- 教程的源代码 here。
- Passport-twitter documentation
- twit documentation
我成功通过上面的教程进行了护照验证。
我还成功使用twit将其发布到了我的Twitter开发人员帐户。
但是,我很难将这两件事结合起来。尝试以 代表另一个用户 的方式发布到Twitter。为此,我需要获取用户的访问令牌和访问令牌密钥。然后,我需要使用该信息向Twitter API发出发布请求。
我不确定将发帖请求放在护照发件人代码中的位置。我尝试将其放在第二个路由中,这是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('/');
})
但是我收到一个错误:Invalid or expired token.
我希望它能工作,因为身份验证有效。
这是我第一次使用OAuth,所以也许我误会了所有工作原理。
我应该在哪里发布请求?
更新:
我尝试使用我的开发帐户的访问令牌和密码发布到我的开发帐户。有效。这使我相信用户的访问令牌和密码有问题。
我想我部分知道会发生什么。
我假设在请求查询对象中找到的属性oauth_verifier
是访问令牌密钥。
const access_token_secret = req.query.oauth_verifier;
但是现在我不认为oauth_verifier
与访问令牌密码相同。 oauth_verifier
的字符少于开发者帐户的访问令牌密钥。因此,似乎数据类型是不同的。
但是现在我想弄清楚访问令牌的秘密在哪里?请求查询对象(req.query
)中只有两个属性;
-
oauth_token
-
oauth_verifier
用户的访问令牌密码在哪里?