10

के पास पासपोर्ट-फेसबुक एक्सेस रिक ऑब्जेक्ट नोडजेस पासपोर्ट प्रमाणीकरण के लिए फेसबुक से कॉलबैक पर, आप कॉलबैक के भीतर req ऑब्जेक्ट कैसे प्राप्त करते हैं?कॉलबैक फ़ंक्शन

passport.use(new FacebookStrategy({ 
    clientID: 123456789, 
    clientSecret: 'SECRET', 
    callbackURL: "http://example.com/login/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, done){ 
    // Is there any way to get the req object in here? 
    } 
)); 

उत्तर

15

passReqToCallback विकल्प की स्थापना, के रूप में इतना:

passport.use(new LocalStrategy({ passReqToCallback: true }, 
    function(req, username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { 
     req.flash('error', 'Your password is too long'); 
     req.flash('error', 'Also, it is too short!!!'); 
     return done(null, false); 
     } 
     return done(null, user); 
    }); 
    } 
)); 

req रूप https://github.com/jaredhanson/passport/issues/39

+1

यह फेसबुक प्रमाणीकरण के साथ भी मेरे लिए काम करता है। – TulioPa

+0

धन्यवाद !! यह एक बड़ी मदद थी। – Tyguy7

5

प्रति मैं बहुत देर हो चुकी उत्तर देते सत्यापित करने कॉलबैक

को पहला तर्क हो जाता है, लेकिन मुझे लगता है कि मेरा समाधान बेहतर और अधिक पारंपरिक है। आधिकारिक दस्तावेज here में। वहाँ एक अनुभाग "एसोसिएशन में कॉलबैक सत्यापित करें", जिसमें यह बताया गया है कि अगर हम सच को रणनीति के passReqToCallback विकल्प सेट, इस अनुरोध सक्षम बनाता है और यह सत्यापित करने के लिए पहले तर्क के रूप में पारित हो जाएगा वापस कॉल करें।

तो मेरी FacebookStrategy अब लगता है कि:

var User = require('../models/UserModel.js'); 
var FacebookStrategy = require('passport-facebook').Strategy; 

exports.facebookStrategy = new FacebookStrategy({ 
     clientID: 'REPLACE_IT_WITH_CLIENT_ID', 
     clientSecret: 'REPLACE_IT_WITH_CLIENT_SECRET', 
     callbackURL: 'http://localhost:3000/auth/facebook/callback', 
     passReqToCallback: true 
    },function(req,accessToken,refreshToken,profile,done){ 
     User.findOne({ 
       'facebook.id' : profile.id 
      },function(err,user){ 
      if(err){ 
       done(err); 
      } 
      if(user){ 
       req.login(user,function(err){ 
        if(err){ 
         return next(err); 
        } 
        return done(null,user); 
       }); 
      }else{ 
       var newUser = new User(); 
       newUser.facebook.id = profile.id; 
       newUser.facebook.name = profile.displayName; 
       newUser.facebook.token = profile.token; 
       newUser.save(function(err){ 
        if(err){ 
         throw(err); 
        } 
        req.login(newUser,function(err){ 
         if(err){ 
          return next(err); 
         } 
         return done(null,newUser); 
        }); 
       }); 
      } 
     }); 
    } 
); 

मेरी कोड नमूने में मैं डीबी में उपयोगकर्ता की जानकारी और सत्र में उपयोगकर्ता जानकारी की बचत को बचाने के लिए कुछ तर्क जोड़ लिया है। मैंने सोचा कि यह लोगों के लिए सहायक हो सकता है।

req.user पासपोर्ट सत्र में संग्रहीत उपयोगकर्ता की जानकारी देता है।

+0

धन्यवाद !! यह एक बड़ी मदद थी। – Tyguy7

संबंधित मुद्दे