Meteor Accounts-ui 在用户访问之前等待电子邮件验证

Meteor Accounts-ui to wait for email verification before user access

本地计算机上的 Meteor 网络应用程序使用 Accounts-passwordAccounts-ui
用户输入电子邮件和密码以创建新帐户。

需要进行配置,以便用户仅在通过电子邮件验证帐户创建后才能获得用户 ID(从而成为当前用户)。

该应用设置了 smtp 变量。它发送验证电子邮件正常。但未能阻止用户在验证前'login'。怎么才能让它在验证后只给出一个有效的userId呢?谢谢

//server
Accounts.onCreateUser(function(options, user) {
  Accounts.config({
    sendVerificationEmail: true
  });
  return user;
});

事情并没有那么简单。 Meteor 需要用户拥有 ID 才能向他们发送电子邮件。您想要做的可能实际上不是阻止登录,而是阻止他们 登录时为了执行您想要的操作,您必须阻止他们看到任何内容。在你的顶级模板中是这样的:

{{#if userVerified}}
  // Body of your app here
  {{> Template.dynamic template=main}}
{{else}}
  You are not yet verified
{{/if}}

并且在相应的 .js 文件中:

Template.body.helpers({
  userVerified () {
    const user = Meteor.user();
    return user.emails[0].verified;
  }
});

正如@Season 指出的那样,验证需要创建一个 userId,以便 link 将其发送到验证电子邮件。

您可以做的是阻止用户在未验证电子邮件的情况下登录。请参阅另一个问题的答案:

我定义了一个全局助手:

Template.registerHelper('isVerified',function(){ // return a true or false depending on whether the referenced user's email has been verified
  if ( Meteor.user() && Meteor.user().emails ) return Meteor.user().emails[0].verified; // look at the current user
  else return false;
});

然后在任何模板(通常是我的主模板)中我可以:

{{#if isVerified}}
  content that only verified users should see
{{else}}
  Please check your email for your verification link!
{{/if}}