Регистрация с подтверждением электронной почты в Meteor не работает? Как это сделать?

Я пытаюсь создать свою пользовательскую страницу регистрации с проверкой электронной почты в Meteor. Я хочу использовать Mandrill для отправки письма с подтверждением. В папке server у меня есть метод:

addUser: function(user) {
    console.log("Adding User - ", user);
    var userOptions = {
        email: user.email, password: user.password,
        profile: {firstname: user.firstname, lastname: user.lastname}
    };

    var createdUser = Accounts.createUser(userOptions);
    console.log("CreatedUser-", createdUser);
    Accounts.onCreateUser(function(options, createdUser) {
        if (options.profile) {
            createdUser.profile = options.profile;
        }
        else {
            createdUser.profile = {};
        }
        Accounts.sendVerificationEmail(createdUser._id, createdUser.email);
        return createdUser;
    });

Метод Accounts.createUser вставляет запись, но электронные письма не отправляются. Я также определил process.env.MAIL_URL с учетными данными smtp Mandrill. Я устал просматривать документы и проверил пару блогов, но, похоже, ничего не работает. Если я удалю createUser(), пользователь не будет вставлен в mongo db, а onCreateUser() завершится ошибкой с исключением. Я просмотрел документы Meteor, но все еще не понимаю, как работает onCreateUser()? Как метод onCreateUser() получит параметры и пользовательские параметры? Я застрял с этим, любое руководство/помощь приветствуется. Изучив еще один вопрос о stackoverflow, я удалил пакет электронной почты. Я добавил в проект wylio:mandrill. Нужен ли мне пакет электронной почты?


person jay    schedule 19.07.2015    source источник


Ответы (2)


Я думаю, вам просто нужно установить параметр конфигурации следующим образом:

Accounts.config({
  sendVerificationEmail: true
});

Если для этого параметра не установлено значение true (а по умолчанию оно равно false), содержимое электронного письма будет выводиться на консоль сервера, что хорошо для тестирования, но, очевидно, плохо для фактической отправки электронных писем.

Я бы добавил пакет электронной почты обратно, я думаю, вам это нужно для отправки электронных писем. Надеюсь, это поможет.

person Jordan Speizer    schedule 20.07.2015
comment
Я уже установил для параметра sendVerificationEmail значение true. Мне пришлось добавить пакет электронной почты обратно. Спасибо за это. Но все же это не сработало, поэтому я попробовал это с другим smtp-сервером, например gmail. - person jay; 21.07.2015

Чтобы отправить электронное письмо, я добавил smtp gmail на стороне сервера. Я посмотрю на мандрил позже, как только я создам импульс.

var smtp = {
    host: "smtp.gmail.com",
    port: "465",
    username: "<your gmail id without @gmail.com>",
    password: "<your password>",
    //ssl: true
};

Для этого я создал отдельный аккаунт на gmail. Для добавления пользователя мне пришлось изменить код. Сначала я создал пользователя с помощью Accounts.createUser() на стороне клиента, а затем вызвал метод для отправки электронной почты с помощью Accounts.sendVerificationEmail() на стороне сервера js.

//client-side
var createdUserId = Accounts.createUser(userOptions, function(error) {
                console.log(error);
}); 
Meteor.call('registerUser', createdUserId);

//Server-side
registerUser: function(createdUserId) {
....
    Accounts.sendVerificationEmail(createdUser._id);
....
} 
person jay    schedule 21.07.2015