Sto cercando di integrare il passport nel mio server nodejs utilizzando connect, ma non riesco a farlo correttamente. Tutte le guide/esempi usano expressJS, quindi ho fatto del mio meglio per riformattare il codice per lavorare con il mio codice, ma non riesco a farlo funzionare. Le parti correlate sono scritte sotto. Qualcuno ha qualche consiglio su quale potrebbe essere il problema? passport.authenticate() non sembra mai essere chiamato (almeno il messaggio console.log all'interno della richiesta di autenticazione di facebook non viene mai stampato). Al momento non sto salvando nulla in un database, quindi il problema dovrebbe essere qualcosa di veramente semplice che mi manca.Utilizzo di PassportJS con Connect for NodeJS per autenticare gli utenti di Facebook
L'unica cosa che viene in mente è il potenziale callback che ho per facebook, che è un url localhost (poiché sto ancora sviluppando questo localmente). Sono stato in grado di autenticarmi con facebook usando anyauth (da un'istanza puramente locale), ma sono passato a passportJS in quanto stavo riscontrando problemi diversi in cui sembrava che passportJS si rivolgesse.
passport = require('passport');
fpass = require('passport-facebook').Strategy;
passport.serializeUser(function(user,done){
done(null, user);
});
passport.deserializeUser(function(obj,done){
done(null,obj);
});
passport.use(new fpass({
clientID:'facebook app id',
clientSecret:'facebook app secret',
callbackURL:'http://localhost:3000/auth/facebook/callback'
},
function(accessToken, refreshToken, fbUserData, done){
console.log('got here');
return done(null,fbUserData);
}
));
function checkLoggedIn(req, res, next){
console.log("req.user: " + req.user);
if(req.user)
next();
else{
console.log('\nNot LOGGED IN\n');
if(req.socket.remoteAddress || req.socket.socket.remoteAddress == '127.0.0.1'){
var folder,contentType;
console.log('req url = '+req.url);
if(req.url == '/'){
folder = __dirname + '/landingPage.html';
contentType = 'text/html';
}
else if(req.url == '/auth/facebook'){
passport.authenticate('facebook');
return;
}
else if(req.url == '/auth/facebook/callback'){
passport.authenticate('facebook', {failureRedirect: '/failbook', successRedirect:'/'});
return;
}
if(folder){
console.log('got to folder part\n\n');
fs.readFile(folder, function(error, content){
if(error){
res.writeHead(500);
res.end();
}
else{
res.writeHead(200, {'Content-Type': contentType});
res.end(content);
}
});
}
else{ res.writeHead(500); res.end();}
}
else {res.writeHead(500); res.end();}
}
}
connect.createServer(
connect.cookieParser(),
connect.bodyParser(),
connect.session({secret:'wakajakamadaka'}),
passport.initialize(),
passport.session(),
checkLoggedIn).listen(8888);
console.log('Server has started.');
}
Qualcuno ha qualche consiglio o vedere un problema tecnico in quello che sto facendo? Le mie altre due alternative sono il passaggio a everyauth e la ricerca di cosa sta succedendo lì, o il passaggio a ExpressJS, ma preferirei non andare con nessuna di queste opzioni.
migliore,
Sami
hmm sto diventando più lontano di prima, ma non funziona ancora abbastanza. ora sto registrando il callback da facebook. Sto controllando '/ auth/facebook/callback' con req.url.split ('?') [0] ora in modo che la callback si registri. aggiungendo a (req, res, next) dopo che la chiamata alla funzione ha causato un loop di reindirizzamento infinito. qualche idea? – thisissami
Penso che dovrai usare il middleware 'connect.query()' nella configurazione del middleware 'createServer'. Passport prevede che 'req.query' venga popolato in molti casi, compreso il richiamo del codice di autorizzazione nella richiamata di Facebook. –
quasi lì ... con un '(req, res, next)' aggiunto alla fine della chiamata di autenticazione callback, la funzione di risposta di Facebook viene raggiunta con i dati di Facebook appropriati. Tuttavia, ottengo un 'TypeError: Object # non ha alcun metodo 'redirect''. La riga di codice incriminata è 'return res.redirect (options.successRedirect);' on line 97 of authenticate.js. Qualche idea su quale potrebbe essere il problema? –
thisissami