如何在Meteor中将forbidClientAccountCreation设置为false?

时间:2015-09-26 10:06:37

标签: meteor meteor-accounts

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也是如此。)我不确定这些是否是我的代码中的任何冲突的直接来源,并且其他开发人员建议删除任何冲突的包,但这似乎是一个糟糕的解决方案。添加包是有原因的。应该有一种方法可以毫无问题地明确设置这个变量。

我似乎无法找到合理的解决方案。想法?

3 个答案:

答案 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:bootstrapuseraccounts:materialize之类的软件包。

您可以通过将Accounts._options.forbidClientAccountCreation的值更改为true来更改此设置。