Как я могу создать серверную часть пользователей в Meteor?
В новой ветке Meteor auth как я могу создать серверную сторону пользователей?
Я вижу, как создать их на стороне клиента с вызовом
[Client] Meteor.createUser(options, extra, callback)
Но предположим, что я хочу создать запись коллекции пользователей Meteor при запуске?
Например, учетная запись администратора при запуске/загрузке приложения?
Спасибо
Steeve
Ответы
Ответ 1
Вероятно, сейчас это хорошо известный факт, но для того, чтобы это сделать - для этого используется новый API-интерфейс сервера на ветке auth
. Из docs на auth:
"[Сервер] Meteor.createUser(опции, дополнительные) - создает пользователя и отправляет этому пользователю электронное письмо со ссылкой для выбора своего первоначального пароля и завершить регистрацию своих аккаунтов
параметры хэш, содержащий: адрес электронной почты (обязательно), имя пользователя (необязательно) extra: дополнительные поля для объекта пользователя (например, имя и т.д.)."
Обратите внимание, что API может быть изменен, поскольку он еще не находится на ведущей ветке.
Ответ 2
В более новых версиях использования метеоров
Accounts.createUser({
username: username,
email : email,
password : password,
profile : {
//publicly visible fields like firstname goes here
}
});
note: хеш пароля генерируется автоматически
В более старых версиях использования метеоров:
1 - NB: У ВАС ЕСТЬ ТРЕБУЕМЫЕ ПАКЕТЫ УСТАНОВЛЕН?
- mrt add accounts-base
- mrt add accounts-password
В некоторых версиях метеорита вы не можете вызвать генератор паровых паролей SRP, как предложил Стиви, поэтому попробуйте следующее:
2 - do Meteor.users.insert()
например.
var newUserId =
Meteor.users.insert({
emails: ['[email protected]'],
profile : { fullname : 'peter' }
});
note: у пользователя должно быть имя пользователя или адрес электронной почты. В этом примере я использовал электронную почту.
3 - Установите пароль для вновь созданной учетной записи.
Accounts.setPassword(newUserId, 'newPassword');
Ответ 3
Пока это было предложено в группе google meteor-core.
Meteor.users.insert({username: 'foo', emails: ['[email protected]'], name: 'baz', services: {password: {srp: Meteor._srp.generateVerifier('password')}}});
Это работает. Я тестировал его во время загрузки/загрузки.
Я бы не считал это постоянным или долгосрочным ответом, потому что я считаю, что ветвь auth все еще находится в значительной степени, и я полагаю, что команда, стоящая за Meteor, предоставит для нее какую-то функциональность.
Итак, не зависеть от этого как долгосрочный ответ.
Steeve
Ответ 4
На данный момент, я считаю, вы не можете. Запуск
Meteor.call('createUser', {username: "foo", password: "bar"});
близок, но реализация createUser
в passwords_server.js
вызывает this.setUserId
при успешном завершении, а setUserId
не может быть вызвана на сервере, если мы не находимся в вызове метода, инициированного клиентом (поиск "Can 't вызвать setUserId по вызову метода инициированного сервером" в livedata_server.js
.
Это похоже на то, что стоит поддержать. Возможно, последние три строки createUser
, которые регистрируют пользователя в, должны управляться с помощью новой опции boolean login
для метода? Затем вы можете использовать
Meteor.call('createUser', {username: "foo", password: "bar", login: false});
в исходном коде сервера.
Ответ 5
Я подтвердил, что следующий код в моем файле server/seeds.js работает с самой последней версией Meteor (Release 0.8.1.1)
if (Meteor.users.find().count() === 0) {
seedUserId = Accounts.createUser({
email: '[email protected]',
password: '123456'
});
}
Каталог (или папка) server
означает, что я запускаю код на сервере. Имя файла seeds.js
является полностью произвольным.
Официальная документация теперь описывает поведение для Accounts.createUser()
при запуске на клиенте и при запуске на сервере.
Ответ 6
Создайте пользователя со стороны сервера
// 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)
}
});
Ответ 7
Рабочий пример coffeescript для версии 1.2.0.2 Meteor (серверная сторона):
userId = Accounts.createUser
username: 'user'
email: '[email protected]'
password: 'password'
profile:
name: 'user name'
user = Meteor.users.findOne userId
Я некоторое время боролся с этим API, получая исключение "Пользователь уже существует" в рабочем коде перед добавлением profile.name в options
, а исключение исчезло.
ссылка: Accounts.createUser(опции, [обратный вызов])