在Meteor中验证电子邮件的正确方法

时间:2015-03-23 09:19:53

标签: email meteor

我正在按照Meteor #20: Verify an Email with Meteor Accounts尝试Meteor的电子邮件验证功能。

我对第3步和第4步有一些疑问:

  1. 在第3步中,Accounts.sendVerificationEmail(user._id);不起作用,而Accounts.sendVerificationEmail(user._id, user.emails[0].address);有效。为什么我需要明确指定电子邮件地址?

  2. 在第4步中,我应该将Template.Homepage.created = ...中的“主页”修改为我的主页模板名称吗?

  3. 在Meteor 1.0.4的文档中,我在“Template.myTemplate”下找不到名为“created”的属性。 那么,如果Template.Homepage.created = ...已被弃用? 写作Template.<myhomeTemplateName>.onCreated = ...是否正确?

  4. 这是验证电子邮件的最佳解决方案吗?

3 个答案:

答案 0 :(得分:0)

  1. Meteor docs开始,如果未指定电子邮件,则电子邮件必须位于emails用户,且必须取消验证。如果您已经验证了地址,则除非明确指定地址,否则不会发送电子邮件。

      

    电子邮件字符串   可选的。   发送电子邮件的用户的哪个地址。该地址必须位于用户的电子邮件列表中。默认为列表中第一个未验证的电子邮件。

  2. docs开始,出现onCreated应该像这样调用:
    Template.HomePage.onCreated(function(){...});

答案 1 :(得分:0)

对于Meteor 1.0.5,请使用

Template.<yourTemplate>.onCreated(function() { ... })

而不是

Template.<yourTemplate>.created = ...

Meteor #20: Verify an Email with Meteor Accounts的第4步中。

以下演示在Meteor 1.0.5下运行良好。

verifyEmail.html:

<head>
  <title>Verify Email</title>
</head>

<body>
  <h1>Sending Email Demo</h1>
  {{> loginButtons}}
</body>

verifyEmail.js :(替换您的案例的用户,密码和服务器值)

if (Meteor.isClient) {
  Template.SendAnyEmail.onCreated(function() {
    if (Accounts._verifyEmailToken) {
      Accounts.verifyEmail(Accounts._verifyEmailToken, function(err) {
        if (err != null) {
          if (err.message = 'Verify email link expired [403]') {
            console.log('Sorry this verification link has expired.')
          }
        } else {
          console.log('Thank you! Your email address has been confirmed.')
        }
      });
    }
  });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    smtp = {
      username: 'user@example.com',
      password: 'password',
      server: 'mail.example.com',
      port: 465
    };

    process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.server) + ':' + smtp.port;

    Accounts.emailTemplates = {
      from: 'Administrator <user@example.com>',
      siteName: 'YourSite',
      verifyEmail: {
        subject: function(user) {
          return 'Verification email from Example.com';
        },
        text: function(user, url) {
          return 'Hi,\n' +
            'Please open the link below to verify your account on Example.com:\n' + url;
        }
      }
    };
  });

  Accounts.onCreateUser(function(options, user) {
    Meteor.setTimeout(function() {
      Accounts.sendVerificationEmail(user._id);
    }, 2 * 1000);
    return user;
  });
}

答案 2 :(得分:0)

在您的server/main.js中,只需设置Meteor.startup块之外的任何位置即可。

Accounts.config({
    sendVerificationEmail: true
});