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?