2015-03-19 3 views
1

Я использую основной пакет учетных записей Meteor для создания новых пользователей и отправки им электронной почты с проверкой, но у меня возникла проблема, когда я вызываю Accounts.createUser со стороны сервера как метод, без проверки электронная почта отправляется, однако, если я вызываю Accounts.createUser со стороны клиента, создаются новые учетные записи и передается клиенту подтверждение ... может кто-нибудь, пожалуйста, скажите мне, что я могу потерять/сделать неправильно здесь? ThanksMeteor Accounts.createUser не отправляет подтверждение по электронной почте

Accounts.createUser({email: adminData.email, password : adminData.password}); 

ответ

2

Так некоторые подсказки и советы. Обычно Accounts.createUser не отправляет электронные письма с проверкой и делает это в одном случае (на стороне клиента), а не в другом случае (на стороне сервера) немного странно. Обычно это только разослал электронные письма проверки, когда у вас есть

Accounts.config({ 
    sendVerificationEmail: true 
}); 

на стороне сервера (см http://docs.meteor.com/#/full/accounts_config). Поэтому сначала вы должны проверить это и, возможно, это уже решает вашу проблему.

Если это не задано другим способом, отправленное по электронной почте подтверждение должно быть вызвано Accounts.sendVerificationEmail (см. http://docs.meteor.com/#/full/accounts_sendverificationemail), но это возможно только на стороне сервера. Поэтому, чтобы использовать эту клиентскую сторону, вам нужно будет написать с ней метод на стороне сервера и вызвать это через Meteor.call со стороны клиента. Однако, если вы не можете найти свою проблему, вы также можете использовать ее для работы с ней, используя Accounts.sendVerificationEmail в пределах Accounts.onCreateUser (см. http://docs.meteor.com/#/full/accounts_oncreateuser) на стороне сервера. Или после того, как вы вызываете серверную сторону Accounts.createUser, поскольку в этот момент вы уже знаете адрес электронной почты пользователей и уже созданную учетную запись, чтобы она работала очень хорошо.

О, и, очевидно, пакет электронной почты необходимо установить (http://docs.meteor.com/#/full/email), но поскольку некоторые письма уже отправлены, я думаю, это так.

+0

Вы не можете вызвать 'Accounts.sendVerificationEmail' внутри' Accounts.onCreateUser', потому что пользователь еще не создан в этом методе. Он будет генерировать исключение, говоря, что пользователь не существует. Однако обходным путем является выполнение функции Meteor.setTimeout (function() {Accounts.sendVerificationEmail (user._id);}, 1000); 'inside' Accounts.onCreateUser'. Это немного хакерский, но он ждет, пока пользователь не будет создан, а затем отправит электронное письмо. –

+0

Другое хакерское обходное решение, которое позволяет избежать тайм-аутов (что всегда может привести к проблемам ;-)) было бы использовать 'Accounts.validateLoginAttempt (function (loginAttempt) {...}));'. Метеор запускает его сразу после полной регистрации и через 'loginAttempt.user.emails [0] .verified' (если он присутствует) вы можете проверить, есть ли у пользователя уже проверенное электронное письмо. В зависимости от результата вы можете делать свои вещи. –

+0

Вы можете исправить меня, если я ошибаюсь, но не будет ли отправлять повторную электронную почту при каждом входе в систему, если они все еще не подтвердили свою электронную почту? Возможно, это сработает, если вы установите какой-то флаг после первого входа в систему, но проверка проверки может быть не лучшим образом. –

Смежные вопросы