I am developing a simple user crud module using compoundjs, compound-passport and passport-facebook. It used the default approach to generate a crud and it works fine if I want to save it to the database but I want to save it to a session here and save the user at a later stage the only problem is I do not get a request or session in model.
Here is my user.js model
module.exports = function (compound, User) {
// define User here
User.findOrCreate = function (data, done) {
console.log(data.profile.emails[0].value);
/* FACEBOOK OPENID */
if (data.profile.provider == "facebook") {
User.all({
where: {
email_id: data.profile.emails[0].value
}, limit: 1
}, function (err, user) {
if(data.profile.gender != '' && data.profile.gender != undefined)
var givenGender = (data.profile.gender == 'male')?'M':'F'
else
var givenGender = '';
if (user[0]) return done(err, user[0]);
var userDet = {
firstname: data.profile.name.givenName,
lastname: data.profile.name.familyName,
email_id: data.profile.emails[0].value,
gender:givenGender,
dob: new Date(data.profile._json.birthday),
registered_from:"facebook",
created_at:new Date(),
updated_at:new Date()
};
req.session.userdet = userDet;//This does not work
done();
//req.session.userdet = userDet;
// User.create({
// displayName: data.profile.displayName,
// email: data.profile.emails[0].value,
// facebookID: data.openId,
// provider:"facebook",
// createDate:new Date(),
// lastLogin:new Date()
// }, done);
});
} else
/* SOMETHING NOT KNOWN YET */
{
console.log("DONT NOW HOW TO HANDLE THIS USER.")
console.log(data.profile);
}
};
};
The req.session.userdet = userDet; above does not work as I don't have a request object in the model.
Here is my facebook.js which implements the facebook strategy
var passport = require('passport');
exports.callback = function(token, tokenSecret, profile, done) {
exports.User.findOrCreate({
facebookId: profile.id,
profile: profile
}, function (err, user) {
return done(err, user);
});
};
exports.init = function (conf, app) {
var Strategy = require('passport-facebook').Strategy;
passport.use(new Strategy({
clientID: conf.facebook.apiKey,
clientSecret: conf.facebook.secret,
callbackURL: conf.baseURL + 'users/signupnew'
}, exports.callback));
passport.serializeUser(function(user, done) {
console.log("I am here");
console.log(user);
done(null, user);
});
passport.deserializeUser(function(id, done) {
exports.User.findById(id, function(err, user) {
done(err, user);
});
});
// app.get('/auth/facebook',
// passport.authenticate('facebook', { scope: [ 'email,user_likes,user_birthday' ] }));
// app.get('/auth/facebook/callback',
// passport.authenticate('facebook', {
// failureRedirect: conf.failureRedirect || '/'
// }), exports.redirectOnSuccess);
app.get('/users/signupnew',passport.authenticate('facebook', {
failureRedirect: conf.failureRedirect || '/'
}),function(req,res){
req.session.redirect = '/users/signup';
exports.redirectOnSuccess(req,res);
});
};
Basically I want to implement a multi step sign up so I have collect all the data in the session and then register a user. I apologise if my understanding about the flow is faulty as I am a new user to node and compound.