2013-08-26 7 views
7

Próbuję zaimplementować połączenie facebook w żagle za pomocą paszportu. Dlatego utworzyłem plik passport.js w folderze Moje usługi, kod jest podany poniżej. Wygląda na to, że logowanie zakończyło się pomyślnie, jednak serializacja użytkownika nie działa tak, jak konsola.log, który umieszczam w nim, nigdy nie pojawia się w konsoli i nie mogę uzyskać dostępu do identyfikatora użytkownika trhough req.user, gdy użytkownik ma być zalogowanym. Czy ktoś zdołał uzyskać paszport współpracujący z żaglami?sails.js + passport.js: sesje zarządzania

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

Odpowiedz

8

Chociaż nie mają bezpośredniego odpowiedź dla ciebie, to była bardzo przydatna, gdy coraz go do pracy z GitHub OAuth: https://github.com/stefanbuck/sails-social-auth-example/blob/master/config/middleware.js

To jest cały, aktualne paszport aplikacja Sails.js realizacji więc może ci się przydać, abyś połączył obie strony debuggera i dowiedział się, co się dzieje.

+8

Link nie działa już – icebreaker

+0

https://github.com/stefanbuck/sails-social-auth-example link repo –