Meteor onCreateUser问题

时间:2013-04-18 18:37:35

标签: meteor

我正在使用Meteor,人们可以通过Facebook连接到该网站。我正在使用人员用户名来识别它们。但是,其中一些没有用户名。例如,新用户的null为用户名。我想要做的是,如果这个人有用户名,那么我们就可以使用他们的用户名了。如果没有,我想用他们的Facebook ID作为他们的用户名。问题是,我的条件不正常。如果此人具有用户名,则if条件认为该人没有。奇怪的是,如果我在if条件之前执行用户名的console.log,它将显示用户名。但是一旦在if中,它认为用户名为null。这是代码:

Accounts.onCreateUser(function(options, user) {
  var fb = user.services.facebook;
  var token = user.services.facebook.accessToken;

    if (options.profile) { 

        options.profile.fb_id = fb.id;
        options.profile.gender = fb.gender;
        options.profile.username = fb.username    

        console.log( 'username : ' + options.profile.username); 


        if ( !(options.profile.username === null || options.profile.username ==="null" || options.profile.username === undefined || options.profile.username === "undefined")) {
          console.log('noooooooo');
          options.profile.username = fb.id; 
        } else {
          console.log('yessssssss');
          options.profile.username = fb.username;
        }

        options.profile.email = fb.email; 
        options.profile.firstname = fb.first_name;

        user.profile = options.profile;     
    }


    sendWelcomeEmail(options.profile.name, options.profile.email); 
    return user;
}); 

使用此代码,如果我使用具有用户名的Facebook登录。条件将显示'noooooooo'但是console.log('username:'+ options.profile.username);将显示我的用户名。为什么这样做? :升

1 个答案:

答案 0 :(得分:2)

这是因为在记录和日志记录异步之前调用了创建..所以你不能确保你的if是或不是true / false。来自fb服务的推送信息是多余的,因为所有这些信息都已经与用户一起保存。

http://docs.meteor.com/#meteor_user

您应该在登录后获取有关用户的信息,因为在那一刻您将能够识别出可以使用用户名/ ID的标识符类型。

//Server side
Meteor.publish("userData", function () {
    return Meteor.users.find({_id: this.userId});

    // You can publish only facebook id..
    /*return Meteor.users.find({_id: this.userId},
        {
            fields: {
                'services.facebook.id': true
            }
        }
    );*/
});

//Client side
Meteor.subscribe("userData");

// .. you can see more informations about logged user
console.log(Meteor.users.find({}).fetch());