2017-06-06 73 views
0

我试图在添加Facebook身份验证到我的应用程序使用护照 - 这工作正常,但我需要访问passport.use()内的数据库。节点:访问req.db我无法访问请求req

这是我在routes/auth.js代码:

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var FacebookStrategy = require('passport-facebook').Strategy; 

[...] 

passport.use(new FacebookStrategy({ 
     clientID: REDACTED, 
     clientSecret: REDACTED, 
     callbackURL: REDACTED, 
     profileFields: ['id', 'displayName', 'email'] 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
     var db = need to access db here; 
     db.users.insertOne({ 'facebookId': profile.id, 'name': profile.displayName, 'email': profile.email }, function(err, user) { 
      return cb(err, user); 
     }); 
    } 
)); 

module.exports = router; 

app.js,我有以下代码:

// make our db accessible to the router 
app.use(function(req,res,next) { 
    req.db = db; 
    next(); 
}); 

如何访问在定位auth.jsreq.db标记?

回答

1

如果dbreq对象,可以configue FacebookStrategyreq对象传递给verify功能。

参见:

passport.use(new FacebookStrategy({ 
     clientID: REDACTED, 
     clientSecret: REDACTED, 
     callbackURL: REDACTED, 
     profileFields: ['id', 'displayName', 'email'], 
     passReqToCallback: true 
    }, 
    function(req, accessToken, refreshToken, profile, cb) { 
     var db = req.db; // need to access db here; 
     db.users.insertOne({ 'facebookId': profile.id, 'name': profile.displayName, 'email': profile.email }, function(err, user) { 
      return cb(err, user); 
     }); 
    } 
)); 

希望工程。