Я создаю приложение, которое не поддерживает публичную регистрацию. Новые пользователи будут созданы существующим пользователем, и электронный адрес электронной почты будет отправлен на электронный адрес нового пользователя. У меня все работает, но моя реализация выглядит хакерской.Как уведомить клиента об успехе/неудаче при создании пользователей без пароля?
Код указан в настоящий момент.
Шаблон:
<template name="addUser">
<form role="form">
<div class="form-group">
<label for="firstName">First Name</label>
<input name="firstName" class="form-control" placeholder="First Name" />
</div>
<div class="form-group">
<label for="lastName">Last Name</label>
<input name="lastName" class="form-control" placeholder="Last Name" />
</div>
<div class="form-group">
<label for="email">Email</label>
<input name="email" class="form-control" placeholder="Email" />
</div>
<button type="submit" class="btn btn-primary">{{faIcon 'plus'}} Add User</button>
</form>
</template>
шаблона Javascript:
Template.addUser.events({
'submit form': function (e, t) {
e.preventDefault();
var attrs = {
email: t.find('[name="email"]').value,
profile: {
firstName: t.find('[name="firstName"]').value,
lastName: t.find('[name="lastName"]').value,
}
};
Meteor.call('addUser', attrs, function (err) {
if (err) {
Errors.throw(err.reason);
} else {
Router.go('home');
}
});
}
});
Мой addUser
метод
Meteor.methods({
addUser: function (attrs) {
var user = Meteor.user();
if (!user) throw new Meteor.Error(401, 'Please login.');
if (!attrs.profile.firstName) throw new Meteor.Error(422, 'Please include a first name.');
if (!attrs.profile.lastName) throw new Meteor.Error(422, 'Please include a first name.');
if (!attrs.email) throw new Meteor.Error(422, 'Please include an email.');
var user = _.pick(attrs, ['firstName', 'lastName', 'email']);
if (Meteor.isServer) {
var newUserId = Accounts.createUser(attrs);
Accounts.sendEnrollmentEmail(newUserId);
}
}
});
Поскольку Accounts.createUser
требует пароль на стороне клиента, я не могу понять, как уведомить клиента об успехе или неудаче, чтобы сделать что-то взломанное с помощью Session
. Каков хороший способ сделать это?
Какую информацию вы точно хотите отправить пользователю? Я вижу, что вы бросаете некоторые «Ошибки». Разве этого недостаточно? Кстати, почему бы не поставить весь метод только на сервер? Кроме того, помните, что последний аргумент «Meteor.call» может быть обратным вызовом, который вы можете использовать для определения успешного выполнения метода. –
Я хотел бы уведомить пользователя о том, что вызовы 'Accounts.createUser' или' Accounts.sendEnrollmentEmail' терпят неудачу. Обычно я искал параметр ошибки в обратном вызове, но 'Accounts.createUser' генерирует исключение, если вы передадите ему обратный вызов на сервере. «Ошибка: Accounts.createUser с обратным вызовом, который еще не поддерживается на сервере». Лучшее, с чего я столкнулся, начиная с размещения вопроса, добавляет что-то к эффекту 'if (! NewUserId) { \t \t \t throw new Meteor.Error (500, 'Произошла ошибка при создании пользователя на сервере. попробуй еще раз.'); \t \t} ' –