2013-10-22 17 views
6

Mam paszport do uwierzytelniania użytkowników w aplikacji ExpressJS. Próbuję umieścić wszystkie trasy na Facebooku we własnym module, ponieważ zamierzam wspierać innych dostawców OAuth. W moim skryptu startowego Mam zdefiniowane wymaganych punktów końcowych FB:Uwierzytelnianie za pomocą Facebooka za pomocą usługi Passport i ExpressJS - Dlaczego weryfikacja oddzwaniania nie jest wywoływana?

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); 

Jak widać jestem wymagająca mój moduł „facebook”, który zawiera aktualne trasy i Facebooka zweryfikowania zwrotnego. Wygląda to tak:

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' }); 
}; 

widzę (logowanie do stdout), który fb_auth nazywa się jednak zweryfikować funkcja zwrotna określone powyżej nie jest. Czy coś przeoczyłem? Czy jest jakiś błąd, który mógłbym uchwycić?

Dzięki!

Odpowiedz

8

Znalazłem odpowiedź tutaj: Using PassportJS with Connect for NodeJS to authenticate Facebook Users

Trzeba jawnie wywołać funkcję „uwierzytelnienia” i przekazuje jej req, res i następny.

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

paszport.authenticate jest oprogramowaniem pośredniczącym. Możesz to uprościć, eksportując je bezpośrednio: 'exports.fb_auth = passport.authenticate ('facebook');' i podobnie dla wywołania zwrotnego. –

+0

@JaredHanson Good Call. Dzięki. – Nick

Powiązane problemy