在 Meteor 中存储每个用户的数据
Storing per-user data in Meteor
我想在我的 meteor 应用程序中存储每个登录用户的信息,例如他们的个人资料图片、简介等。但是如果我尝试做类似 Meteor.user().picLink = "..."; 的事情它似乎在随后每次调用 Meteor.user() 时被删除。我认为这意味着我不应该像那样直接在用户对象上存储额外的数据。
我能想到的唯一回应是有一个单独的集合,其中包含用户数据。但这似乎很难与 Meteor.users 保持一致。有没有更好的方法?
所有用户帐户都带有一个自动发布的 profile
字段,您可以像这样更新它:
var userId = Meteor.userId();
var url = 'http://example.com/kittens.jpg';
Meteor.users.update(userId, {$set: {'profile.photo': url});
这将更新基础数据库并跨连接持久保存。
正如我指出的那样 here 您应该知道,即使 insecure
包已被删除,配置文件对象当前在默认情况下也是可编辑的。这意味着任何用户都可以打开控制台并修改 his/her 配置文件。
更好的方法是拒绝更新并改用方法:
客户
var url = 'http://example.com/kittens.jpg';
Meteor.call('update.photo', url);
服务器
Meteor.users.deny({
update: function() {return true;}
});
Meteor.methods({
'update.photo': function(url) {
check(url, String);
Meteor.users.update(this.userId, {$set: {'profile.photo': url}});
}
});
我想在我的 meteor 应用程序中存储每个登录用户的信息,例如他们的个人资料图片、简介等。但是如果我尝试做类似 Meteor.user().picLink = "..."; 的事情它似乎在随后每次调用 Meteor.user() 时被删除。我认为这意味着我不应该像那样直接在用户对象上存储额外的数据。
我能想到的唯一回应是有一个单独的集合,其中包含用户数据。但这似乎很难与 Meteor.users 保持一致。有没有更好的方法?
所有用户帐户都带有一个自动发布的 profile
字段,您可以像这样更新它:
var userId = Meteor.userId();
var url = 'http://example.com/kittens.jpg';
Meteor.users.update(userId, {$set: {'profile.photo': url});
这将更新基础数据库并跨连接持久保存。
正如我指出的那样 here 您应该知道,即使 insecure
包已被删除,配置文件对象当前在默认情况下也是可编辑的。这意味着任何用户都可以打开控制台并修改 his/her 配置文件。
更好的方法是拒绝更新并改用方法:
客户
var url = 'http://example.com/kittens.jpg';
Meteor.call('update.photo', url);
服务器
Meteor.users.deny({
update: function() {return true;}
});
Meteor.methods({
'update.photo': function(url) {
check(url, String);
Meteor.users.update(this.userId, {$set: {'profile.photo': url}});
}
});