Gli utenti sono oggetti speciali in meteoriti; non si desidera aggiungere campi all'utente ma nel profilo utente.
Dal doc:
By default the server publishes username, emails, and profile.
Se si desidera aggiungere le proprietà, come il cognome quando si crea l'account, è necessario utilizzare il gancio Account.onCreateUser
lato server: http://docs.meteor.com/#accounts_oncreateuser
Accounts.onCreateUser(function(options, user) {
//pass the surname in the options
user.profile['surname'] = options.surname
return user
}
Se vuoi aggiornare un utente dopo, puoi farlo dal client in questo modo:
Meteor.users.update({_id:Meteor.user()._id}, { $set: {what you want to update} });
Per impostazione predefinita, la base utenti lo consentirà (l'utente corrente può aggiornarsi autonomamente). Se non ti fidi dei tuoi utenti e vuoi assicurarti che tutto sia correttamente aggiornato, puoi anche vietare qualsiasi aggiornamento dal client e renderli tramite un Meteor.call()
e passare ai controlli sul lato server. Ma questo sarebbe triste.
Edit:
Come detto nei commenti, aggiungendo non sarà possibile opzioni tramite l'account-ui standard. Sarai in grado di aggiornare l'utente solo dopo la registrazione. Per aggiungere opzioni quando ti iscrivi, devi renderti proprietario della tua forma.
Non voglio insultare scrivendo Tag HTML, ma qui è ciò che si desidera avere dopo l'evento presentare (e dopo i vari controlli):
var options = {
username: $('input#username')[0].value,
emails: [{
address: $('input#email')[0].value,
verified: false
}],
password: $('input#password')[0].value,
profile: {
surname: $('input#surname')
},
};
Accounts.createUser(options , function(err){
if(err) $('div#errors').html(err.message);
});
è necessario solo il pacchetto di conto-base ; non l'account-ui.
Accesso con le reti sociali è la torta:
Meteor.loginWithFacebook({
requestPermissions: ['email', 'user_birthday', 'user_location']
}, function(error){loginCallBack(error);});
Chi l'ram1 risposta fatta:
Questo non è il modo in cui le opere di meteore. Non "POST" un modulo. Vuoi che tutte le tue comunicazioni client/server siano fatte tramite la websocket. L'equivalente di ciò di cui stai parlando è un "Meteor.call ('myserverfunction', myarguments, mycallback)" di un metodo server dal client e tu passi gli argomenti che vuoi che il server usi.
Ma questo non è il modo in cui otterrete il meglio della meteora.V'è la filosofia che si desidera lavorare con:
- hai dati nel vostro mini locali Mongo avete ottenuto dal server
- si aggiorna localmente i dati nella vostra base/vista
- meteora fare la sua magia per trasmettere questi aggiornamenti al server
- lì il server può rispondere: ok, gli aggiornamenti salvati, questo è perfetto per voi. Oppure rispondi: nop! invertire le modifiche (e puoi implementare un sistema di notifica degli errori)
(può rispondere no perché non hai il permesso di aggiornare questo campo, perché questo aggiornamento infrange una regola che hai impostato ...)
Tutto ciò che devi fare è impostare autorizzazioni e controlli sui database lato server. In questo modo, quando un cliente onesto effettua un aggiornamento, vede immediatamente il risultato; molto prima che sia stato inviato al server e inviato agli altri client. Questo è compensazione latenza, uno dei sette principi della meteora.
Se si modifica un dati tramite Meteor.call, si farà che:
- inviare un aggiornamento al server
- i controlli server e aggiornare la base di
- il server invia l'aggiornamento i clienti (voi compresi)
- gli aggiornamenti di base locali e l'aggiornamento view => vedi il tuo aggiornamento
=> questo è ciò che hai avuto in app ieri; meteora ti permette di costruire un'app oggi. Non applicare le vecchie ricette :)
Questa è una risposta eccellente. Tuttavia, l'avvertimento che vorrei fornire è che l'OP dovrebbe passare un argomento 'options' ad una chiamata' Accounts.createUser 'lato client, come si fa notare, ma questo potrebbe non essere banale se si basa su ' account-ui-bootstrap-dropdown', che probabilmente gestirà quella chiamata per lui. Non ho familiarità con il pacchetto, e comunque ci sarà un modo facile per aggirare questo (anche se si tratta di biforcazione), ma comunque penso che avrà bisogno di scavare nel pacchetto un po 'più di quello che suggerisci. – richsilv
Se vuole aggiungere campi quando l'utente si sta registrando, deve creare il proprio modulo di registrazione; lo standard dal pacchetto base non lo farà facilmente. Solo perché richiederebbe l'aggiunta di campi. Modifico la mia risposta per spiegare come :) – fabien
Sembra che questa spiegazione di Meteor.call sia corretta solo se il metodo chiamato è memorizzato esclusivamente nel codice del server. Inserisci i metodi nel tuo account lib in modo che siano disponibili su client e server e la compensazione della latenza dovrebbe funzionare correttamente. :) Altrimenti puoi entrare nelle regole allow/deny, anche se sembra davvero più messico che chiamare metodi Meteor isomorfi. –