4

私は、compoundjs、compound-passport、およびpassport-facebookを使用して、単純なユーザーcrudモジュールを開発しています。デフォルトのアプローチを使用してcrudを生成し、データベースに保存したい場合は正常に動作しますが、ここでセッションに保存し、後の段階でユーザーを保存したいのは、リクエストが得られないことだけですまたはモデルのセッション。

これが私のuser.jsモデルです

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

req.session.userdet = userDet; モデルにリクエストオブジェクトがないため、上記は機能しません。

これは、facebook 戦略を実装する私の facebook.js です。

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


};

基本的に、複数ステップのサインアップを実装したいので、セッション内のすべてのデータを収集してからユーザーを登録します。私はノードとコンパウンドの新しいユーザーであるため、フローに関する私の理解に誤りがある場合は申し訳ありません。

4

0 に答える 0