2 Stimmen

Einloggen mit Twitter oAuth und Passport.js

Ich baue eine Anwendung in node.js, die es ermöglicht, sich mit einem Twitter-Konto anzumelden.

Beim ersten Mal, als ich den Code ausgeführt habe, hat es funktioniert, aber einige Tage später gab es einfach einen Fehler zurück.

Ich habe versucht, meine Twitter-Anwendungs-Konfiguration zu ändern, aber es funktioniert nicht.

app.js:

var express = require('express')
  , io
  , _appS = require('./appServer')
  , passport = require('passport')
  , TwitterStrategy = require('passport-twitter').Strategy
  ;

var app = express()
  , PORT = 7777
  ;

passport.serializeUser(function ( user, done ) {
    done( null, user );
});

passport.deserializeUser(function ( obj, done ) {
    done( null, obj );
});

passport.use(new TwitterStrategy ({
        consumerKey : "consumer",
        consumerSecret : "secret",
        callbackURL : "http://127.0.0.1:7777/auth/twitter/callback"
    },
    function ( token, tokenSecret, profile, done ) {

        process.nextTick (function () {
            return done ( null, profile );
        });
    }
));

app.configure(function () {
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');

    app.use(express.static(__dirname + '/static'));
    app.use(express.logger());
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.session({secret : 'argentina campeon'}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);

    app.engine('jade', require('jade').__express);
});

io = require('socket.io').listen(app.listen(PORT));

/**
 * ROUTES
 */

app.get(
    "/", 
    function ( req, res ) {
    if ( req.user ) {
        //es gibt einen Benutzer
        io.sockets.on('connection', function ( socket ) {
            _appS.init( req.user.id, socket );
        });

    }
        else
            res.redirect('/login');
    }
);

app.get(
    "/login", 
    function ( req, res ) {
        if ( ! req.user )
            res.render("login");
        else
            res.redirect('/');
    }
);

app.get(
    "/auth/twitter", 
    passport.authenticate('twitter'),
    function ( req, res ) { }
);

app.get(
    "/auth/twitter/callback", 
    passport.authenticate('twitter', { failureRedirect : '/login' }),
    function ( req, res ) {
        console.log( req.user );
        res.redirect('/');
    }
);

app.get(
    "/logout", 
    function ( req, res ) {
        req.logout();
        res.redirect('/');
    }
);

Wenn ich versuche mich anzumelden, werde ich zu Twitter weitergeleitet, um die Berechtigungen der App zu bestätigen, aber es heißt:

Wir leiten Sie zur Anwendung weiter. Dies kann einige Minuten dauern.

Also, wenn ich ein paar Sekunden warte, erscheint ein neuer Link:

Wenn Ihr Browser Sie nicht weiterleitet, klicken Sie bitte hier

Also, wenn ich darauf klicke, werde ich jetzt zu meiner Anwendung weitergeleitet, aber jetzt erhalte ich einen Fehler:

Fehler: Fehler beim Suchen des Anforderungstokens in der Sitzung bei Strategy.OAuthStrategy.authenticate (C:\Program Files\nodejs\node_modules\passport-twitter\node_modules\passport-oauth1\lib\strategy.js:142:54) bei Strategy.authenticate (C:\Program Files\nodejs\node_modules\passport-twitter\lib\strategy.js:85:40) bei attempt (C:\Program Files\nodejs\node_modules\passport\lib\middleware\authenticate.js:337:16) bei authenticate (C:\Program Files\nodejs\node_modules\passport\lib\middleware\authenticate.js:338:7) bei callbacks (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:164:37) bei param (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:138:11) bei pass (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:145:5) bei Router._dispatch (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:173:5) bei Object.router (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:33:10) bei next (C:\Program Files\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15)

Der lustige Teil ist, dass ich in meiner Konsole alle Benutzerdaten von Twitter nach dem Login sehen kann, weil ich an einer Stelle meines Codes if ( req.user ) console.log( req.user ); geschrieben habe.

  • Ich verwende die neueste Version von node.js und seinen Paketen (express, passport, twitter-passport, socket.io)
  • Ich verwende Windows 7

Also, was kann ich tun, um das zu beheben?

-2voto

wberry Punkte 17277

Wenn dies wirklich Ihr Code ist und nicht etwas, das Sie vor dem Posten hier eingefügt haben, dann sagen Sie entweder Twitter oder dem Client (ich vergesse welcher), sich selbst anstelle Ihres Post-Login GET-Aufrufs aufzurufen:

callbackURL : "http://127.0.0.1:7777/auth/twitter/callback"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X