Meteor中的默认设置不允许从客户端创建帐户,这在许多应用程序中出于安全考虑,但我正在构建博客,需要允许用户创建帐户以便他们发表评论。
github,stackoverflow和各种教程的典型响应似乎建议在客户端/服务器条件之外的任何地方添加以下代码到文件中,以便它可以在客户端和服务器上运行:
Accounts.config({
forbidClientAccountCreation: false
});
看起来很简单。我在我的lib文件夹中的一个文件(configure.js)中输入了这段代码,但终端中出现以下错误消息:
W20150925-19:52:17.568(9)? (STDERR) /Users/Eric/.meteor/packages/meteor-tool/.1.1.4.2l3p0l++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245
W20150925-19:52:17.568(9)? (STDERR) throw(ex);
W20150925-19:52:17.568(9)? (STDERR) ^
W20150925-19:52:17.627(9)? (STDERR) Error: Can't set `forbidClientAccountCreation` more than once
W20150925-19:52:17.627(9)? (STDERR) at packages/accounts-base/accounts_common.js:95:1
W20150925-19:52:17.627(9)? (STDERR) at Array.forEach (native)
W20150925-19:52:17.627(9)? (STDERR) at Function._.each._.forEach (packages/underscore/underscore.js:105:1)
W20150925-19:52:17.628(9)? (STDERR) at Object.Accounts.config (packages/accounts-base/accounts_common.js:92:1)
W20150925-19:52:17.628(9)? (STDERR) at app/lib/configure.js:1:45
W20150925-19:52:17.628(9)? (STDERR) at app/lib/configure.js:5:3
W20150925-19:52:17.628(9)? (STDERR) at /Users/Eric/pilgrim/.meteor/local/build/programs/server/boot.js:222:10
W20150925-19:52:17.628(9)? (STDERR) at Array.forEach (native)
W20150925-19:52:17.628(9)? (STDERR) at Function._.each._.forEach (/Users/Eric/.meteor/packages/meteor-tool/.1.1.4.2l3p0l++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20150925-19:52:17.628(9)? (STDERR) at /Users/Eric/pilgrim/.meteor/local/build/programs/server/boot.js:117:5
=> Exited with code: 8
=> Your application is crashing. Waiting for file change.
“无法多次设置forbidClientAccountCreation
”这一行似乎暗示问题源于多个包以某种方式重新声明此相同代码。
我有一些软件包,例如accounts-ui,accounts-password,useraccounts:core和useraccounts:foundation,但似乎Meteor被冲突的信号所压倒(其他人抱怨与useraccounts冲突:bootstrap也是如此。)我不确定这些是否是我的代码中的任何冲突的直接来源,并且其他开发人员建议删除任何冲突的包,但这似乎是一个糟糕的解决方案。添加包是有原因的。应该有一种方法可以毫无问题地明确设置这个变量。
我似乎无法找到合理的解决方案。想法?
答案 0 :(得分:3)
使用useraccounts:core
包时,不能将其设置为false,因为该包将其设置为true。 useraccounts
套件提供的UI应允许用户默认创建帐户。在使用accounts-ui
套件时,您无法使用Accounts.createUser()
提供的用户界面来创建用户(也不能在客户端上使用useraccounts
。
答案 1 :(得分:1)
Meteor允许客户创建帐户。
最好根据已添加和/或删除的软件包以及编写代码的块(服务器/客户端)来考虑如何设置项目。
了解您添加/删除的软件包是如何从客户端和/或服务器创建用户的基本因素。
您使用哪个包来创建用户?
以下是使用accounts-password
包从客户端创建用户的简单示例。用户在此提供的凭据是电子邮件地址和密码。请注意,还有外部包也可以在其中创建用户。
首先:
meteor remove insecure
meteor add accounts-password
HTML:
<body>
{{> join}}
</body>
<template name="join">
<input type="email" id="email">
<input type="password" id="password" placeholder="6 charactors minimum">
<button class="submit"></button>
</template>
JS:
Template.join.events({
'click .submit': function(e, template) {
var email = template.find('#email').value;
var password = template.find('#password').value;
Accounts.createUser({
email: email,
password: password
},
function(error) {
if (error) {
console.log(error);
}
else {
console.log("account created");
}
});
}
});
打开mongo shell并输入db.users.find()
,您将看到已创建的用户。
将来,最好提出一个问题,提供进一步的细节,使SO社区能够重现代码/问题,从而解决问题。
答案 2 :(得分:0)
我猜您已经安装了useraccounts:bootstrap
或useraccounts:materialize
之类的软件包。
您可以通过将Accounts._options.forbidClientAccountCreation
的值更改为true来更改此设置。