我用护照推特设置了 OAuth,登录和身份验证工作正常。尝试执行授权请求(例如更新状态)时会出现问题。
passport.use(new TwitterStrategy({
consumerKey: config.twitter.clientID
, consumerSecret: config.twitter.clientSecret
, callbackURL: config.twitter.callback_url || 'http://' + config.domain + '/auth/twitter/callback'
},
function(token, tokenSecret, profile, done) {
Player.findOne({ 'twitter.id': profile.id }, function (err, player) {
if (err) { return done(err) }
if (!player) {
var player = new Player({
name: profile.displayName
, twitter: profile._json
, twitter_token: token
, twitter_tokenSecret: tokenSecret
})
player.save(function (err, player) {
if (err) log.error(err);
return done(err, player);
})
}
else {
return done(err, player)
}
})
}
))
所以这通过猫鼬保存了播放器并且可以工作。我保存了护照给定的令牌和令牌秘密,并假设它们是oAuth().getOAuthRequestToken()
作为来自 Twitter 的原始回调的一部分生成的,因此对于给定登录会话的其余部分应该是有效的。(也许是一个糟糕的假设?)
稍后,当我们想为用户发布推文时,已经获取了 Player 记录及其关联的令牌+秘密:
function twitter_oauth() {
return new OAuth (
"https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
keys.consumerKey,
keys.consumerSecret,
"1.0",
null,
"HMAC-SHA1"
)
}
....
twitter_oauth().post(api_endpoint, token, secret, body, "application/json",
function (error, data, res) {
if (error) {
console.error(error)
} else {
console.log('tweet sent')
}
}
)
对此的响应只是状态 401 和“无法使用 OAuth 进行身份验证”。
那么,我错过了一些重要的事情吗?我还没有深入研究护照来源以找出实际上是什么token
和tokenSecret
论据,但在这里问希望有人能指出上述的主要缺陷。