Passport-twitter で 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)
}
})
}
))
したがって、これはマングースを介してプレーヤーを保存し、機能します。パスポートによって与えられた token と tokenSecret を保存し、それらがoAuth().getOAuthRequestToken()
Twitter からの元のコールバックの一部として生成されていると想定し、指定されたログイン セッションの残りの部分で有効である必要があります。(もしかしたら悪い仮定?)
後で、ユーザーのために何かをツイートしたい場合は、Player レコードとそれに関連付けられた token+secret をフェッチします。
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
ますが、誰かが上記の主要な欠陥を指摘してくれることを期待してここに尋ねます.