Accounts.createUser创建用户,但仅从服务器创建,不允许客户端创建用户

时间:2014-02-27 10:38:38

标签: meteor

首先请原谅我的写作,我正在使用谷歌翻译。

我想要的是创建用户meteor,但只能从服务器创建并且不允许客户端创建用户。

尝试放

Accounts.validateNewUser (function () {
    return false; 
});

但它拒绝我创建服务器用户(我不想要)

非常感谢你。

2 个答案:

答案 0 :(得分:3)

您可以将Accounts.config用于此目的。只需在服务器代码中的任何位置执行

Accounts.config({
    forbidClientAccountCreation: true,
});

答案 1 :(得分:0)

执行此操作的一种方法是在服务器上创建用户时向profile键添加某种不可猜测的字符串,在validateNewUser函数中检查该键,然后在适当的光标上使用observe立即删除它。

在服务器上,您将拥有:

Accounts.validateNewUser(function(user) {
    return (user.profile && user.profile.createUserKey === [KEY]);
});

Meteor.users.find().observe({
    added: function(user) {
        Meteor.users.update(user, {$unset: {'profile.createUserKey': true}});
    }
});

然后您的服务器端createUser行看起来像这样(以及您要在配置文件中传递的任何其他数据):

Accounts.createUser({username: [USERNAME], password: [PASSWORD], profile: {createUserKey: [KEY]}});

假设您没有在任何地方发布验证函数(如Github),客户端将无法知道密钥是什么,因此无法创建新用户。如果您不相信自己不要将其推送到Github或类似产品,请将密钥存储在MongoDB中未发布的集合中,然后在服务器启动时将其删除 - 这就是我的工作。

注意我认为我在这里使用光标有点不能令人满意,因为删除onCreateUser回调中的密钥要好得多,但这似乎被称为< em>之前 validateNewUser,所以这里没用。替代方案是在Accounts包中使用您自己的createUser函数的修改版本,这可能不是太难,但有点涉及到这里,或者只是将密钥留在用户文档中并确保你不发表它。