我无法看到有关我的用户的任何个人资料信息,不知道为什么?
服务器:
Meteor.publish("userData", function () {
return Meteor.users.find({_id: this.userId},
{fields: {'profile': 1}});
});
Meteor.publish("allUsers", function () {
//TODO: For testing only, remove this
return Meteor.users.find({}, {fields: {'profile': 1}});
});
客户:
Meteor.autosubscribe(function () {
Meteor.subscribe('allUsers',null , function() { console.log(Meteor.users.find().fetch()) });
Meteor.subscribe('userData', null, function() { console.log(Meteor.user())});
});
....
Accounts.createUser({email:email,password:password, profile: {name: name}},function(error){
...
});
我的控制台输出的对象只有_id和第一个的电子邮件,第二个没有定义。 配置文件信息(在我的情况下名称)似乎有效,因为在我的server.js我有一个名称验证工作正常:
Accounts.onCreateUser(function(options, user) {
if(options.profile.name.length<2)
throw new Meteor.Error(403, "Please provide a name.");
return user;
});
我错过了什么吗?
谢谢!
答案 0 :(得分:3)
使用多个订阅时,只有first subscription matters。如果第二个订阅包含相同的集合,则会被忽略,因为它与第一个订阅冲突。
你可以这样做,但是:
服务器:
var debugmode = false; //set to true to enable debug/testing mode
Meteor.publish("userData", function () {
if(debugmode) {
return Meteor.users.find({}, fields: {'profile': 1}});
}
else
{
return Meteor.users.find({_id: this.userId},{fields: {'profile': 1}});
}
});
客户端:
Meteor.autosubscribe(function () {
Meteor.subscribe('userData', null, function() { console.log(Meteor.user()); console.log(Meteor.users.find({}).fetch());});
});
答案 1 :(得分:3)
发现问题:
在onCreateUser函数中,我需要将选项中的配置文件信息添加到用户对象中,所以我的函数应该是这样的:
Accounts.onCreateUser(function(options, user) {
if(options.profile.name.length<2)
throw new Meteor.Error(403, "Please provide a name.");
if (options.profile)
user.profile = options.profile;
return user;
});
答案 2 :(得分:1)
这是我正在使用的解决方法,放在〜/ server / createAccount.js我遇到的问题是我会在配置文件未定义时出错。这似乎可以通过在创建帐户时创建配置文件来解决问题。
希望这很有用。在github问题评论中找到它,在下面的评论中:
// BUGFIX via https://github.com/meteor/meteor/issues/1369 @thedavidmeister
// Adds profile on account creation to prevent errors from profile undefined on the profile page
Accounts.onCreateUser(function(options, user) {
user.profile = options.profile ? options.profile : {};
return user;
});