2012-07-24 28 views
14

En la nueva rama de autenticación de Meteor, ¿cómo puedo crear usuarios en el servidor?¿Cómo puedo crear usuarios del lado del servidor en Meteor?

que ver cómo crearlos lado del cliente con la llamada a

[Client] Meteor.createUser(options, extra, callback) 

Pero supongamos que quiero crear un registro de usuarios de la colección de meteoritos en el arranque?

Por ejemplo, la cuenta de administrador durante el inicio/el arranque de una aplicación?

Gracias Steeve

+1

usted debe actualizar su respuesta aceptada a uno que dice usar accounts.createuser – xaxxon

Respuesta

8

Probablemente Es un hecho bien conocido ahora, pero en aras de completar este - hay una nueva API de servidor para hacer esto en la rama auth. De los docs on auth:

"[servidor] Meteor.createUser (opciones, extras) - Crea un usuario y envía ese usuario un correo electrónico con un enlace para elegir su contraseña inicial y completar su inscripción de la cuenta

opciones de un hash que contiene: correo electrónico (obligatorio), nombre de usuario (opcional) adicional:. campos adicionales para el objeto de usuario (por ejemplo, nombre, etc.) "

Tenga en cuenta que la API está sujeto a cambios en la medida que no está en la rama principal todavía.

+6

Meteor ahora es compatible con el uso de 'createUser' en el servidor. Detalles aquí: http://docs.meteor.com/#accounts_createuser – alanning

2

Por el momento, creo que no se puede. Correr

Meteor.call('createUser', {username: "foo", password: "bar"}); 

se acerca, pero la implementación de createUser en passwords_server.js llama this.setUserId en caso de éxito, y setUserId no puede ser llamado en el servidor a menos que estemos en una invocación de método iniciado por el cliente (búsqueda de "No se puede llamar SetUserID en un servidor iniciado llamada al método" en livedata_server.js.

Esto parece como algo que vale la pena apoyar. Tal vez las tres últimas líneas de createUser, que el usuario inicie sesión en, deben ser controlados por una nueva opción booleana login con el método? Entonces podría usar

Meteor.call('createUser', {username: "foo", password: "bar", login: false}); 

en el código de arranque del servidor.

8

Por ahora esto se ha sugerido en el grupo de meteor-core de google.

Meteor.users.insert({username: 'foo', emails: ['[email protected]'], name: 'baz', services:  {password: {srp: Meteor._srp.generateVerifier('password')}}}); 

Funciona. Lo probé durante la correa de inicio/arranque.

No consideraría esta la respuesta permanente oa largo plazo porque creo que la rama de autenticación todavía está en un gran grado de cambio y me imagino que el equipo detrás de Meteor proporcionará algún tipo de funcionalidad para ello.

Por lo tanto, no dependa de esto como una respuesta a largo plazo.

Steeve

21

En las versiones más recientes del uso de meteoritos

Accounts.createUser({ 
          username: username, 
          email : email, 
          password : password, 
          profile : { 
           //publicly visible fields like firstname goes here 
          } 

    }); 

nota: el hash de la contraseña se genera automáticamente

En las versiones anteriores de uso de meteoritos:

1 - NB: ¿TIENE LOS PAQUETES EXIGIDOS INSTALADOS?

  • MRT añaden cuentas base
  • MRT agregar cuentas en contraseñas

En algunas versiones de meteoritos no se puede llamar generador de sal contraseña SRP como se sugiere Steeve, a fin de tratar esto:

2 - do Meteor.users.insert()

Por ej.

var newUserId = 
Meteor.users.insert({ 
     emails: ['[email protected]'], 
     profile : { fullname : 'peter' } 
}); 

nota: un usuario debe tener un nombre de usuario o una dirección de correo electrónico. Usé el correo electrónico en este ejemplo.

3 - Finalmente, establezca la contraseña para la cuenta recién creada.

 
     Accounts.setPassword(newUserId, 'newPassword'); 
    

+0

+1 Para mencionar cuentas-contraseña. ¡Intenté usar Accounts.createUser sin este paquete y no funcionaría! –

1

He confirmado que el código siguiente en mi archivo del servidor/seeds.js funciona con la versión más reciente de Meteor (Release 0.8.1.1)

if (Meteor.users.find().count() === 0) { 
    seedUserId = Accounts.createUser({ 
    email: '[email protected]', 
    password: '123456' 
    }); 
} 

directorio (o carpeta) de server significa que estoy ejecutando el código en el servidor. El nombre de archivo seeds.js es completamente arbitrario.

El official documentation ahora describe el comportamiento de Accounts.createUser() cuando se ejecuta en el cliente y cuando se ejecuta en el servidor.

0

Trabajando ejemplo CoffeeScript para la versión 1.1.0.2 Meteor (lado del servidor):

userId = Accounts.createUser 
    username: 'user' 
    email: '[email protected]' 
    password: 'password' 
    profile: 
     name: 'user name' 
user = Meteor.users.findOne userId 

Luché durante algún tiempo con esta API conseguir 'el usuario ya existe' excepción en el código de trabajo antes de añadir a la profiles.name options y la excepción desapareció.

referencia: Accounts.createUser(options,[callback])

1

Crear usuario del lado del servidor

// Server method 
    Meteor.methods({ 
     register: function(data) { 
     try { 
     console.log("Register User"); 
     console.log(data); 
     user = Accounts.createUser({ 
      username: data.email, 
      email: data.email, 
      password: data.password, 
      profile: { 
      name: data.email, 
      createdOn: new Date(), 
      IsInternal: 0 
      } 
     }); 
     return { 
      "userId": user 
     }; 
     } catch (e) { 
     // IF ALREADY EXSIST THROW EXPECTION 403 
     throw e; 
     } 
    } 
    }); 
    // Client call method 
    Meteor.call('register',{email: "[email protected]",password: "123456"}, function(error, result){ 
     if(result){ 
     console.log(result) 
     } 
     if(error){ 
     console.log(result) 
     } 
    }); 
Cuestiones relacionadas