web-dev-qa-db-fra.com

Les applications de bureau ne prennent en charge que la valeur oauth_callback 'oob'/oauth/request_token

J'essaie de m'authentifier avec OAuth sur NodeJS et j'obtiens cette erreur: 

Erreur lors de l'obtention du jeton de demande OAuth: {statusCode: 401, données: '\ n\n Les applications de bureau ne prennent en charge que la valeur oauth_callback \' oob\'\ n\o\n\n/oauth/request_token\n\n}}

Voici mon code (server.js)

var express = require('express');
var util = require('util');
var oauth = require('oauth');

var app = express.createServer();

// Get your credentials here: https://dev.Twitter.com/apps
var _twitterConsumerKey = "1";
var _twitterConsumerSecret = "2";

var consumer = new oauth.OAuth(
    "https://Twitter.com/oauth/request_token", "https://Twitter.com/oauth/access_token", 
    _twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");

app.configure('development', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    app.use(express.logger());
    app.use(express.cookieParser());
    app.use(express.session({ secret: "very secret" }));

    app.use(function(req, res, next) {
        res.locals.user = req.session.user;
        next();
    });
});

app.get('/sessions/connect', function(req, res){
    consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
        if (error) {
            res.send("Error getting OAuth request token : " + util.inspect(error), 500);
        } else {  
            req.session.oauthRequestToken = oauthToken;
            req.session.oauthRequestTokenSecret = oauthTokenSecret;
            res.redirect("https://Twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);      
        }
    });
});

app.get('/sessions/callback', function(req, res){
    util.puts(">>"+req.session.oauthRequestToken);
    util.puts(">>"+req.session.oauthRequestTokenSecret);
    util.puts(">>"+req.query.oauth_verifier);
    consumer.getOAuthAccessToken(req.session.oauthRequestToken, req.session.oauthRequestTokenSecret, req.query.oauth_verifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) {
        if (error) {
            res.send("Error getting OAuth access token : " + util.inspect(error) + "["+oauthAccessToken+"]"+ "["+oauthAccessTokenSecret+"]"+ "["+util.inspect(results)+"]", 500);
        } else {
            req.session.oauthAccessToken = oauthAccessToken;
            req.session.oauthAccessTokenSecret = oauthAccessTokenSecret;

            res.redirect('/home');
        }
    });
});

app.get('/home', function(req, res){
    consumer.get("http://Twitter.com/account/verify_credentials.json", req.session.oauthAccessToken, req.session.oauthAccessTokenSecret, function (error, data, response) {
        if (error) {
            res.redirect('/sessions/connect');
            // res.send("Error getting Twitter screen name : " + util.inspect(error), 500);
        } else {
            var parsedData = JSON.parse(data);

            // req.session.twitterScreenName = response.screen_name;    
            res.send('You are signed in: ' + parsedData.screen_name);
        } 
    });
});

app.get('*', function(req, res){
    res.redirect('/home');
});

app.listen(8080);

Merci d'avance.

42
felipekm

Remplissez le champ "URL de rappel" dans votre compte dev des paramètres Twitter.

124
user3248653

En plus de ce que dit l'autre réponse ... 

J'ai continué à avoir une erreur en essayant de remplir l'URL de rappel dans la console de développement de Twitter. J'essayais d'entrer http://localhost:4000, mais cela me donnait des erreurs. Si vous devez utiliser localhost, vous pouvez utiliser http://127.0.0.1:4000 à la place, et Twitter l'accepte.

(Peut-être évident pour certains, mais m'a pris un peu de temps pour le comprendre.)

21
matthewpalmer

C’est une vieille question, mais j’ai rencontré cette erreur aujourd’hui. Ce que j’ai remarqué, c’est que les NOUVELLES applications Twitter peuvent être sauvegardées SANS une URL de rappel, mais dès que vous enregistrez votre application avec une URL de rappel, Twitter a gagné ne vous laissez pas enregistrer - il reviendra à la dernière URL que vous aviez. Dans notre cas, cela importait peu puisque notre flux OAuth fournissait l'URL de rappel, mais que quelque chose du côté de Twitter oblige à créer une URL de rappel (TOUT URL de rappel). Ainsi, dans notre cas, cette erreur ne s'est produite que dans les environnements de développement auxquels une nouvelle application Twitter (et non utilisée) était associée.

1
Everett