【问题标题】:Meteor - Validating new user document serversideMeteor - 验证新的用户文档服务器端
【发布时间】:2016-02-13 05:44:09
【问题描述】:

我在处理这些看似微不足道的事情时遇到了麻烦,harrrr!
我有这个用户文档:

userData = {
  account: {
    type: 'free'
  },
  profile: {
    name: 'Artem',
  },
  username: 'aaa@gmail.com',
  password: '123'
};

我要发送的客户端:Accounts.createUser(userData);
然后服务器端我想检查帐户类型是否等于“免费”。如果没有 - 我想中止创建新用户(并希望在客户端抛出错误)
我在文档中发现了 2 个功能可能可以帮助我做到这一点:

  • Accounts.validateNewUser 问题:它接收到不包含profile, username, password, email 以外的属性的“修剪”用户对象。因此,我无法验证 account.type,因为它在正在验证的用户对象上不存在。
  • Accounts.onCreateUser 问题:在创建通用用户对象后调用它,我无法取消在用户集合中插入新文档。它绝对需要返回用户文档。如果我返回 undefined 它会在服务器上引发错误: Exception while invoking method 'createUser' Error: insert requires an argument
    它也不允许抛出方法错误(因为它不是方法)->因此我无法记录错误客户端。

【问题讨论】:

  • 如何将帐户类型数据作为配置文件对象的一部分发送?然后您将能够在Accounts.validateNewUser 中访问此值并进行验证。
  • 奇怪的是你必须做那些花样。我已经提交了一个问题 - github.com/meteor/meteor/issues/6231

标签: meteor


【解决方案1】:

您可以使用Accounts.validateNewUser,只需对您的数据结构稍作改动:

userData = {
  profile: {
    name: 'Artem',
    account : {
       type : 'free'
    }
  },
  username: 'aaa@gmail.com',
  password: '123'
};

那么您应该能够访问您需要的数据。 据我记得在流星论坛上有一些关于删除profile 字段的讨论,这就是为什么我以不同的方式解决这类问题。对我来说Meteor.users 是集合,为了和平,不应该改变它——它可能会被未来版本的流星改变。我的方法一开始需要编写更多代码,但后来它得到了回报,因为你有地方存储有关用户的数据,而Meteor.users 集合的文档数据量最少。

我会使用jagi:astronomy@0.12.1 来创建架构和自定义方法。一般来说,我会使用架构创建新集合UserAccounts

UserAccount = new Astro.Class( {
    name: 'UserAccount',
    collection: 'UserAccounts',
    fields: {
       'userId'            : {type: 'string'},
       'type'              : {type: 'string', default:'free'}
    },
} )

并将架构添加到Meteor.users

User = new Astro.Class( {
    name: 'User',
    collection: Meteor.users,
    fields: {
       'services'            : {type: 'object'},
       'emails'              : {type: 'array'}
    },
    methods:{
        account : function(){
            return UserAccounts.findOne({userId:this._id})
        }
    }
} )

用法如下:

var user = Meteor.users.findOne();
user.account().type

总结:

  • Accounts.onCreateUser :始终允许创建用户帐户并始终创建与其对应的UserAccount(带有字段userId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 2019-09-08
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2013-10-11
    相关资源
    最近更新 更多