tag attribute javascript meteor meteorite

javascript - attribute - Cómo evitar el inicio de sesión automático después de crear usuario



title html css (4)

Agrego cuentas, paquetes de contraseña y base de cuentas en Meteor

Cuando creo usuario así:

Accounts.createUser({username: username, password : password}, function(err){ if (err) { // Inform the user that account creation failed console.log("Register Fail!") console.log(err) } else { console.log("Register Success!") // Account has been created and the user has logged } });

La cuenta ha sido creada y el usuario ha iniciado sesión.

por ejemplo, inicio sesión como administrador y quiero crear una cuenta para alguien, pero no quiero cerrar sesión después de crear una cuenta.

¿Cómo evitar el inicio de sesión automático después de crear usuario?

Encuentro el código fuente de accouts-password paquetes accouts-password :

48 - 63 líneas:

// Attempt to log in as a new user. Accounts.createUser = function (options, callback) { options = _.clone(options); // we''ll be modifying options if (!options.password) throw new Error("Must set options.password"); var verifier = Meteor._srp.generateVerifier(options.password); // strip old password, replacing with the verifier object delete options.password; options.srp = verifier; Accounts.callLoginMethod({ methodName: ''createUser'', methodArguments: [options], userCallback: callback }); };

¿Debo modificar el código fuente para resolver este problema?

Cualquier ayuda es apreciada.


Está intentando utilizar la administración de cuentas del lado del cliente para realizar una tarea para la que no se ha diseñado.

El propósito del paquete de cuentas del lado del cliente es permitir específicamente a los nuevos usuarios crear su cuenta y esperar que inicien sesión de inmediato.

Debe recordar que ciertas funciones se pueden ejecutar en el cliente y / o en el servidor con diferentes comportamientos, los documentos Accounts.createUser especifican que: "En el cliente, esta función inicia sesión como el usuario recién creado al completarse con éxito".

Por el contrario, "En el servidor, devuelve el ID de usuario recién creado". (no se mete con el usuario actualmente conectado en el cliente).

Para resolver su problema, debe escribir un método del lado del servidor para crear un nuevo usuario y poder llamarlo desde el panel de administración del lado del cliente, después de completar correctamente un formulario de creación de usuario de su propio diseño.


Si desea continuar utilizando Accounts.createUser en el cliente sin iniciar sesión en el usuario. Puede llamar a Meteor.logout() desde la devolución de llamada opcional de createUser .

Accounts.createUser(user, err => { if (err) { // handle error return; } // Prevent unwanted login Meteor.logout(); });


Si realmente desea este comportamiento, necesitará modificar password_server.js

y retire las líneas 474-475 que contienen:

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

Por lo tanto, el usuario no iniciará sesión después de que se crea el usuario.


Yo tuve el mismo problema. Quería crear una interfaz de administración donde un administrador pueda configurar la contraseña de un usuario pero no pasarla a un método de servidor en texto plano. El lado del cliente de Accounts.createUser ya se ocupa de esto, así que solo modifico la secuencia normal de eventos en accounts-password/password-server.js en presencia de una bandera. No es perfecto ni bonito, pero parece funcionar y no tiene que modificar el paquete de accounts-password directamente.

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); }}); });