【问题标题】:Meteor submiting form: Uncaught TypeError: Cannot read property'vk' of undefined流星提交表单:未捕获的类型错误:无法读取未定义的属性
【发布时间】:2015-04-03 03:16:06
【问题描述】:

我正在使用 accounts-vk 通过 vkontakte.ru 提供登录 在我删除 meteor-autopublish 包之前,一切正常。 我的 connectSubmit.js:

    Template.connectSubmit.events({
        'submit form': function(e) {
            e.preventDefault();
            var query = {
                vk_id: Meteor.user().services.vk.id,
                user_id: Meteor.userId(),
                photo: Meteor.user().services.vk.photo          
            };
        query._id = Connects.insert(query);
        Router.go('index');
    }
  });

错误是:

Uncaught TypeError: Cannot read property 'vk' of undefined

我的模板的第二个问题: 这在我删除自动发布之前效果很好:

{{currentUser.services.vk.first_name}} 

但现在无法正常工作。 我认为 Meteor.publish 函数有问题,但我不知道如何解决。

【问题讨论】:

    标签: meteor handlebars.js


    【解决方案1】:

    autopublish 开启时,它将发布您用户的所有字段。当您删除 autopublish 时,只会发布几个字段(用户名、_id、电子邮件、个人资料)。

    如果您发布 services 字段,您将向客户端公开登录令牌和散列密码等内容。显然,您永远不想在生产中这样做(这就是为什么应该始终删除 autopublish 的原因)。有关这方面的更多信息,请参阅我的 common mistakes 文章的“已发布的秘密”部分。

    因此,对您的问题的简短回答是,客户一开始就不应该做任何这些事情。

    长答案是,如果你有需要这些数据的逻辑,你需要做两件事之一(这可能需要单独的问题):

    如果服务信息仅用于数据变异

    在这种情况下使用服务器端方法。在您的submit 事件中,您将调用一个对当前用户执行findOne 并更新Connects 集合的方法。这里读取services数据是安全的,因为代码是在服务器上运行的。

    如果客户端需要服务信息(例如照片)

    您需要将services 中的数据复制到profile 等安全字段中。您可以在用户 creates her account 或她 logs in 时执行此操作。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 2016-03-26
      • 2018-06-04
      • 2018-12-26
      • 1970-01-01
      • 2019-10-14
      • 2021-12-22
      • 2015-01-06
      • 1970-01-01
      相关资源
      最近更新 更多