2013-10-22 8 views
6

I am Passport per autenticare gli utenti in un'applicazione ExpressJS. Sto tentando di posizionare tutte le rotte di Facebook nel proprio modulo perché intendo supportare altri provider OAuth. Nel mio script di avvio ho definito i punti finali FB richieste:Autenticazione Facebook con Passport e ExpressJS - Perché la chiamata di verifica non viene richiamata?

var express = require('express'); 
var routes = require('./routes'); 
var user = require('./routes/user'); 
var facebook = require('./routes/facebook'); 
var login = require('./routes/login'); 
var http = require('http'); 
var path = require('path'); 

var app = express(); 

/* Configuration stuff here*/ 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/login', login.index); 
app.get('/auth/facebook', facebook.fb_auth); 
app.get('/auth/facebook/callback', facebook.fb_callback); 

Come potete vedere sto richiedendo il mio modulo 'facebook', che contiene i percorsi reali e Facebook verificare callback. Ecco come si presenta:

var passport = require('passport') 
, FacebookStrategy = require('passport-facebook').Strategy 
, User = require('../services/user'); 

passport.use(new FacebookStrategy({ 
    clientID: 'myclientid', 
    clientSecret: 'mysecretkey', 
    callbackURL: "http://localhost:3000/auth/facebook/callback" //localhost:3000 domain is registered domain in fb 
}, 
function(accessToken, refreshToken, profile, done) { 
    console.log('verify') 
    User.findOrCreate(profile, function(err, user){ 
     if(err) return done(err); 
     done(null, user); 
    }); 
} 
)); 

// Redirect the user to Facebook for authentication. When complete, 
// Facebook will redirect the user back to the application at 
//  /auth/facebook/callback 
exports.fb_auth = function(req, res){ 
    passport.authenticate('facebook') 
}; 
// Facebook will redirect the user to this URL after approval. Finish the 
// authentication process by attempting to obtain an access token. If 
// access was granted, the user will be logged in. Otherwise, 
// authentication has failed. 
exports.fb_callback = function(req, res){ 
    console.log('callback') 
    passport.authenticate('facebook', { successRedirect: '/', 
    failureRedirect: '/login' }); 
}; 

posso vedere (accedendo a stdout) che fb_auth si chiama ma la funzione di callback verificare sopra definito non è. Sto trascurando qualcosa? C'è un errore che si verifica da qualche parte che posso catturare?

Grazie!

risposta

8

ho trovato la risposta qui: Using PassportJS with Connect for NodeJS to authenticate Facebook Users

È necessario chiamare esplicitamente la funzione 'autenticazione' e dotarla di req, res, e il prossimo.

exports.fb_auth = function(req, res, next){ 
    passport.authenticate('facebook')(req, res, next); 
    return; 
}; 

exports.fb_callback = function(req, res, next){ 
    passport.authenticate('facebook', { successRedirect: '/', 
    failureRedirect: '/login' })(req, res, next); 
}; 
+1

passport.authenticate è middleware. Puoi semplificarlo per esportarlo direttamente: 'exports.fb_auth = passport.authenticate ('facebook');' e allo stesso modo per il callback. –

+0

@JaredHanson Good Call. Grazie. – Nick

Problemi correlati