2016-04-10 16 views
0

Anon işlevi kullanmak yerine facebookResponse işaretçi işlevi kullanmak için bir yol var mı ve req, res, next erişim hakkına sahip mi? bind'u kullanmayı düşündüm ama nasıl bağlarım bilmiyorum. Rotanın get() yöntemi. passport.authenticate('facebook',facebookResponse.call(this, req, res, next) ile başarı elde edemedim.İşaretçi işlevi, .get() kapamadan alma hatalarını alsın mı?

auth.route('/auth/facebook/callback') 
    .get(function(req, res, next) { 
    passport.authenticate('facebook', facebookResponse); 
}); 

function facebookResponse(err, userDoc, info) { 
    if (err) { return next(err); } 
    // I don't think !userDoc will ever happen because of mongo upsert 
    if (!userDoc) { return res.redirect('/login'); } 
    req.logIn(userDoc, function(err) { 
    if (err) { return next(err); } 
    return res.redirect('http://localhost:9000/users'); 
    }); 
} 

cevap

1

bir yolu işlevi dönmek için bir işlevi kullanmak olacaktır: Burada

auth.route('/auth/facebook/callback') 
    .get(function(req, res, next) { 
    passport.authenticate('facebook', facebookResponse(req, res, next)); 
}); 

function facebookResponse(req, res, next) { 
    return function(err, userDoc, info) { 
     if (err) { return next(err); } 
     // I don't think !userDoc will ever happen because of mongo upsert 
     if (!userDoc) { return res.redirect('/login'); } 
     req.logIn(userDoc, function(err) { 
      if (err) { return next(err); } 
      return res.redirect('http://localhost:9000/users'); 
     });   
    } 
} 

iç işlevi, bir kapatma dış fonksiyonları parametreleri (req, res, next) erişimi var.

+0

Harika bir fikir! Ancak bir sebepten dolayı, passport.js bunu sevmiyor ve rotada kalıyor. Neden olduğunu söylemek zor bir hata yok. – dman

İlgili konular