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

时间:2016-10-20 07:19:46

标签: meteor meteor-accounts

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

需要对其进行配置,以便用户在验证通过电子邮件创建帐户后才能获取userId(从而成为currentUser)。

该应用已设置smtp变量。它发送验证邮件很好。但它未能阻止用户在验证前“登录”。如何才能使它在验证后只提供有效的userId?感谢

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

3 个答案:

答案 0 :(得分:1)

它不是那么简单。 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;
  }
});

答案 1 :(得分:1)

正如@Season指出的那样,验证要求创建userId以将其链接到验证邮件。

如果用户无法验证其电子邮件,您可以阻止用户登录。请参阅另一个问题的答案:

https://stackoverflow.com/a/24940581/3512709

答案 2 :(得分:1)

我定义了一个全局帮助器:

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}}