4

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.

laggingreflex
  • 32,948
  • 35
  • 141
  • 196
amit1310
  • 8,825
  • 2
  • 12
  • 12

0 Answers0