2013-08-26 11 views
7

Sto cercando di implementare una connessione Facebook in vele usando il passaporto. Pertanto, ho creato un file passport.js nella mia cartella servizi, il codice è indicato di seguito. Sembra che l'accesso sia stato eseguito correttamente, tuttavia la serializzazione dell'utente non sembra funzionare in quanto il console.log che ho inserito non appare mai nella console e non posso accedere all'ID utente trhough req.user una volta che l'utente è supposto per accedere. Qualcuno è riuscito a ottenere il passaporto lavorando con le vele?sails.js + passport.js: gestione delle sessioni

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

risposta

8

Mentre io non ho una risposta diretta per voi, questo è stato estremamente utile per quando a farla funzionare con GitHub OAuth: https://github.com/stefanbuck/sails-social-auth-example/blob/master/config/middleware.js

Questo è un intero, di recente, il passaporto applicazione Sails.js attuazione quindi potrebbe essere utile per affiancare i due nel debugger e scoprire cosa sta succedendo.

+8

link non funziona più – icebreaker

+0

https://github.com/stefanbuck/sails-social-auth-example link per pronti contro termine –

Problemi correlati