Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止创建用户后自动登录_Javascript_Meteor_Meteorite - Fatal编程技术网

Javascript 如何防止创建用户后自动登录

Javascript 如何防止创建用户后自动登录,javascript,meteor,meteorite,Javascript,Meteor,Meteorite,我在Meteor 当我创建这样的用户时: Accounts.createUser({username:username,password:password},函数(err){ 如果(错误){ //通知用户帐户创建失败 log(“注册失败!”) console.log(错误) }否则{ log(“注册成功!”) //帐户已创建,用户已登录 } }); 帐户已创建,用户已登录 例如,我以管理员身份登录,我想为某人创建一个帐户,但我不想在创建帐户后注销 如何防止创建用户后自动登录 我发现包的

我在
Meteor

当我创建这样的用户时:

Accounts.createUser({username:username,password:password},函数(err){
如果(错误){
//通知用户帐户创建失败
log(“注册失败!”)
console.log(错误)
}否则{
log(“注册成功!”)
//帐户已创建,用户已登录
}    
});
帐户已创建,用户已登录

例如,我以管理员身份登录,我想为某人创建一个帐户,但我不想在创建帐户后注销

如何防止创建用户后自动登录

我发现包的源代码:

48-63行:

//尝试以新用户身份登录。
Accounts.createUser=函数(选项,回调){
options=\克隆(options);//我们将修改选项
如果(!options.password)
抛出新错误(“必须设置选项.密码”);
var验证器=Meteor.\u srp.GeneraterGenerator(选项.密码);
//删除旧密码,替换为验证程序对象
删除选项。密码;
options.srp=验证器;
Accounts.calllogin方法({
methodName:'createUser',
methodArguments:[选项],
userCallback:callback
});
};
我应该修改源代码来解决这个问题吗


非常感谢您的帮助。

您正在尝试使用客户端帐户管理来执行一项它不是专门为之设计的任务

客户端帐户包的目的是专门允许新用户创建他们的帐户并期望立即登录

您必须记住,某些函数可以在客户端和/或服务器上以不同的行为运行,Accounts.createUser docs指定:“在客户端上,此函数在成功完成后作为新创建的用户登录。”

相反,“在服务器上,它返回新创建的用户id”。(它不会干扰客户端上当前登录的用户)


为了解决您的问题,您应该编写一个创建新用户的服务器端方法,并能够在正确填写您自己设计的用户创建表单后,从客户端管理面板调用该方法。

如果您确实需要此行为,您需要修改
密码\u server.js

并拆下包含以下内容的管路474-475:

// client gets logged in as the new user afterwards.
this.setUserId(result.id);

因此,用户创建后将不会登录。

我也遇到了同样的问题。我想创建一个管理员界面,管理员可以在其中设置用户密码,但不能以明文形式将其传递给服务器方法。Accounts.createUser的客户端已经处理了这个问题,所以我只需在有标志的情况下更改
Accounts password/password server.js
中的正常事件序列。它既不完美也不漂亮,但似乎很有效,您不必直接修改
帐户密码

Meteor.startup(function ()
    {

        // store the default createUser method handler
        var default_create_user = Meteor.server.method_handlers.createUser;

        // remove it so we can register our own
        delete Meteor.server.method_handlers.createUser;

        Meteor.methods({createUser: function (options) {

            var default_login_method = Accounts._loginMethod;

            // check if noAutoLogin flag is present
            if (options.noAutoLogin)
            {
                // temporarily disable the login method while creating our user

                // NB: it might be possible that simultaneous calls to createUser that do want the default behavior
                // would use the altered Accounts._loginMethod instead

                Accounts._loginMethod = function(s, m, a, p, fn)
                {
                    // this is the callback that is constructed with a closure of the options array and calls internal create functions
                    fn();

                    // restore default _loginMethod so other calls are not affected
                    Accounts._loginMethod = default_login_method;
                }
            }

            // invoke the default create user now that the login behavior has been short-circuited
            default_create_user(options);

        }});
    });

如果要继续在客户端上使用
Accounts.createUser
,而不让用户登录。您可以从
createUser
调用
Meteor.logout()


非常感谢。我太粗心了,以至于忽略了重要的解释。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊;
Accounts.createUser(user, err => {
  if (err) {
    // handle error
    return;
  }

  // Prevent unwanted login
  Meteor.logout();
});