首先请原谅我的写作,我正在使用谷歌翻译。
我想要的是创建用户meteor,但只能从服务器创建并且不允许客户端创建用户。
尝试放
Accounts.validateNewUser (function () {
return false;
});
但它拒绝我创建服务器用户(我不想要)
非常感谢你。
答案 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
函数的修改版本,这可能不是太难,但有点涉及到这里,或者只是将密钥留在用户文档中并确保你不发表它。