Użytkownicy są specjalne przedmioty w meteor; nie chcesz dodawać pól do użytkownika, ale do profilu użytkownika.
Z Doc:
By default the server publishes username, emails, and profile.
Jeśli chcesz dodać właściwości jak nazwiskiem podczas tworzenia konta, należy użyć w haku Account.onCreateUser
server-side: http://docs.meteor.com/#accounts_oncreateuser
Accounts.onCreateUser(function(options, user) {
//pass the surname in the options
user.profile['surname'] = options.surname
return user
}
Jeśli chcesz zaktualizować użytkownika po, możesz zrobić to od klienta w ten sposób:
Meteor.users.update({_id:Meteor.user()._id}, { $set: {what you want to update} });
Domyślnie baza użytkowników zezwala na to (bieżący użytkownik może się aktualizować). Jeśli nie ufasz swoim użytkownikom i chcesz się upewnić, że wszystko jest poprawnie zaktualizowane, możesz również zabezpieczyć wszelkie aktualizacje od klienta i wykonać je poprzez Meteor.call()
i przejść do strony serwera sprawdzającego. Ale byłoby to smutne.
Edit:
Jak powiedział w komentarzach, dodając opcje za pośrednictwem standardowego interfejsu konta nie będzie możliwe. Będziesz mógł aktualizować użytkownika dopiero po rejestracji. Aby dodać opcje podczas subskrypcji, musisz utworzyć własny formularz.
nie będę obrażać pisząc znaczników HTML, ale tutaj jest to, co chcesz mieć po zdarzeniu przedstawienia (i po różnych kontroli):
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);
});
Trzeba tylko pakiet podstawowy konta ; nie konto-ui.
Zaloguj się z sieci społecznych jest ciasto:
Meteor.loginWithFacebook({
requestPermissions: ['email', 'user_birthday', 'user_location']
}, function(error){loginCallBack(error);});
O ram1 odpowiedzi wykonany:
To nie jest droga prace meteorów. Nie "POST" formularza. Chcesz, aby cała twoja komunikacja klient/serwer odbywała się za pośrednictwem websocket. Odpowiednikiem tego, o czym mówisz, jest "Meteor.call (" funkcja myserverfunction ", myarguments, mycallback)" metody serwera od klienta i przekazujesz argumenty, których serwer ma użyć.
Ale to nie jest sposób, w jaki zdobędziesz najlepsze meteory.Jest to filozofia chcesz pracować z:
- masz dane teleadresowe w lokalnych mini Mongo masz z serwera
- zaktualizować lokalnie te dane teleadresowe twojej bazy/view
- meteor wykonywać swoją magię przesłać te aktualizacje na serwer
- tam serwer może odpowiedzieć: ok, aktualizacje zapisane, to jest płynne dla ciebie. Lub odpowiedz: nop! odwróć zmiany (i możesz zaimplementować system powiadamiania o błędach)
(może odpowiedzieć "nie", ponieważ nie masz uprawnień do aktualizacji tego pola, ponieważ ta aktualizacja powoduje złamanie reguły, którą skonfigurowałeś ...)
Wszystko, co robisz, to ustawianie uprawnień i kontroli na serwerze po stronie baz danych. W ten sposób, gdy uczciwy klient robi aktualizację, natychmiast widzi rezultat; zanim zostanie przekazany na serwer i wysłany do innych klientów. Jest to kompensacja opóźnienia, jedna z siedmiu zasad meteorytu.
Jeśli modyfikowanie danych za pośrednictwem Meteor.call, można to zrobić:
- wysłać aktualizacji do serwera
- serwer sprawdza i aktualizuje bazę
- serwer wysłać aktualizację klienci (w tym siebie)
- lokalnych aktualizacjach bazowych i aktualizacją view => widzisz swoją aktualizacja
=> to co miałeś wczoraj aplikację; meteor pozwala zbudować dzisiejszą aplikację. Nie stosuj starych receptur :)
Jest to doskonała odpowiedź. Jednakże zastrzeżenie, które chciałbym podać, to fakt, że OP będzie musiał przekazać argument "options" do po stronie klienta "Calls.createUser", jak zauważysz, ale to może nie być całkowicie banalne, jeśli opiera się na '. pakiet accounts-ui-bootstrap-dropdown', który prawdopodobnie będzie obsługiwał to żądanie dla niego. Nie jestem zaznajomiony z paczką, a zresztą nie będzie to łatwe (nawet jeśli wymaga to rozwidlenia), ale mimo wszystko myślę, że będzie musiał zagłębić się w paczkę nieco więcej niż sugerujesz. – richsilv
Jeśli chce dodać pola podczas rejestracji, musi utworzyć własny formularz rejestracyjny; standardowe wyjście z pakietu podstawowego nie będzie tak łatwe. Tylko dlatego, że wymagałoby dodania pól. Edytuję odpowiedź, aby wyjaśnić, w jaki sposób :) – fabien
Wygląda na to, że to wyjaśnienie Meteor.call jest poprawne tylko wtedy, gdy wywołana metoda jest przechowywana wyłącznie w kodzie serwera. Umieść metody na swoim koncie lib, aby były dostępne zarówno na kliencie, jak i na serwerze, a kompensacja opóźnienia powinna działać poprawnie. :) W przeciwnym razie można uzyskać reguły zezwalające/odmawiać, choć wydaje się to bardziej bałamutne niż wywoływanie metod izomorficznych Meteor. –