2013-08-26 47 views
7

我試圖在使用護照的sails中實現Facebook連接。因此,我在我的services文件夾中創建了一個passport.js文件,代碼如下所示。它看起來像登錄已成功完成,但用戶序列化似乎不起作用,因爲我放在它中的console.log從未出現在控制檯中,並且一旦用戶被假定,我不能訪問用戶標識,只要req.user要登錄。有沒有人設法獲得護照與風帆工作?sails.js + passport.js:管理會話

var passport = require('passport') 
    , FacebookStrategy = require('passport-facebook').Strategy, 
    bcrypt  = require('bcrypt'); 

// helper functions 
function findById(id, fn) { 
    User.findOne(id).done(function(err, user){ 
    if (err){ 
     return fn(null, null); 
    }else{ 
     return fn(null, user); 
    } 
    }); 
} 

function findByUsername(u, fn) { 
    User.findOne({ 
    username: u 
    }).done(function(err, user) { 
    // Error handling 
    if (err) { 
     return fn(null, null); 
    // The User was found successfully! 
    }else{ 
     return fn(null, user); 
    } 
    }); 
} 

// Passport session setup. 
// To support persistent login sessions, Passport needs to be able to 
// serialize users into and deserialize users out of the session. Typically, 
// this will be as simple as storing the user ID when serializing, and finding 
// the user by ID when deserializing. 
passport.serializeUser(function(user, done) { 
    console.log("utilisateur serilizé!"); 
    done(null, user.uid); 
}); 

passport.deserializeUser(function(id, done) { 
    //console.log("coucou"); 
    findById(id, function (err, user) { 
    done(err, user); 
    }); 
}); 


// Use the LocalStrategy within Passport. 
// Strategies in passport require a `verify` function, which accept 
// credentials (in this case, a username and password), and invoke a callback 
// with a user object. 


// using https://gist.github.com/theangryangel/5060446 
// as an example 


passport.use(new FacebookStrategy({ 
    clientID: 'XXX', 
    clientSecret: 'XXX', 
    callbackURL: "http://localhost:1337/callback" 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    User.findOne({uid: profile.id}, function(err, user) { 
     if (err) { return done(err); } 
     if (user) { 
     //console.log('momo'); 
     User.update({uid : user.uid},{token : accessToken},function(){done(null, user);}); 
     } else { 
     console.log(profile); 
     var user_data = { 
      token : accessToken 
      , provider: profile.provider 
      , alias: profile.username 
      , uid:  profile.id 
      , created: new Date().getTime() 
      , name: { 
      first: profile.name.givenName 
      , last: profile.name.familyName 
      } 
      , alerts: { 
       email:  true 
      , mobile: false 
      , features: true 
      } 
     }; 
     console.log(user_data); 
     User.create(user_data).done(function(err, user) { 
      console.log(err); 
      if(err) { console.log("err");throw err; } 
      done(null, user); 
     }); 
     } 
    }); 
    } 
)); 

回答