【问题标题】:Storing per-user data in Meteor在 Meteor 中存储每个用户的数据
【发布时间】:2015-02-20 16:55:49
【问题描述】:

我想在我的流星应用程序中存储每个登录用户的信息,例如他们的个人资料图片、简历等。但如果我尝试做类似 Meteor.user().picLink = "...";在随后每次调用 Meteor.user() 时,它似乎都会被删除。我认为这意味着我不应该像那样直接在用户对象上存储额外的数据。

我能想到的唯一回应是有一个单独的集合,其中包含用户数据。但这似乎很难与 Meteor.users 保持一致。有没有更好的办法?

【问题讨论】:

    标签: meteor data-modeling


    【解决方案1】:

    所有用户帐户都带有一个自动发布的profile 字段,您可以像这样更新它:

    var userId = Meteor.userId();
    var url = 'http://example.com/kittens.jpg';
    Meteor.users.update(userId, {$set: {'profile.photo': url});
    

    这将更新底层数据库并跨连接保持。

    正如我指出的here,您应该知道配置文件对象当前默认是可编辑的,即使insecure 包已被删除。这意味着任何用户都可以打开控制台并修改他/她的个人资料。

    更好的方法是拒绝更新并改用一种方法:

    客户

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

    【讨论】:

    • 让我在这里添加这个:stackoverflow.com/questions/26699783/…,它解释了如何在创建用户时添加字段,在这种情况下它也可能会派上用场。
    • 很酷,但是我必须使用 .update() 还是可以直接访问 user.profile?
    • 如果你想修改DB,你需要实际调用update,否则你只是在内存中设置。
    • 如果不仅仅是个人资料数据(例如 sayor cmets),最好将 Meteor 用户连接到这个或其他方式(或其他选项)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多