J'ai OAuth mis en place avec passeport-twitter, et la connexion et l'authentification fonctionne bien. Le problème vient lorsque vous essayez de faire une demande autorisée, comme la mise à jour de l'état.faire des appels autorisés à Twitter API avec noeud-oauth et passeport
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)
}
})
}
))
Donc cela économise le lecteur via mongoose et fonctionne. J'enregistre le jeton et le jetonSecret donnés par passeport, et supposons qu'ils ont été générés avec oAuth().getOAuthRequestToken()
dans le cadre du rappel original de Twitter, et devraient donc être valides pour le reste de la session de connexion donnée. (? Peut-être une mauvaise prise en charge)
Plus tard, quand nous voulons tweet quelque chose pour l'utilisateur, ayant alla chercher le record du joueur et son secret jeton associé +:
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')
}
}
)
La réponse à cette question est tout simplement l'état 401 et "Impossible d'authentifier avec OAuth."
Alors, est-ce qu'il me manque quelque chose d'important? Je n'ai pas encore creusé dans la source du passeport pour savoir ce que token
et tokenSecret
arguments sont réellement, mais demander ici en espérant que quelqu'un soulignerait la faille majeure dans le ci-dessus.
trouvé les params réels étant affichés, ils semblent tous être là et raisonnable: POST /1/statuses/update.json HTTP/1.1 \ r Autorisation: OAuth oauth_consumer_key = "QtYPhe8Es3ohYs69JhR9UQ", oauth_nonce = » 9ywy2s eTxJPFobX5vaYWahoU0v1QVd4a », oauth_signature_method = "HMAC-SHA1", oauth_timestamp = "1354253395", oauth_token = "17236341-ldvJkClcdwbk1Naax7KBHRgwso7o4 GtzxGpLPAks", oauth_version = "1.0", oauth_signature = "Ut5XGNA0Za4PlVQkgXoMJELY0Jo% 3D" hôte: api.twitter.com – sbeam