Meteor:如果未验证用户的电子邮件,则阻止访问应用程序

时间:2015-05-06 15:43:47

标签: meteor

是否有办法限制应用的可访问性,并将用户重定向到呈现模板的路径“请检查您的电子邮件并验证您的电子邮件。”

用户在创建帐户后会收到验证链接,当用户点击它时,电子邮件会被设置为true - 很棒。

在帐户创建和验证电子邮件之间,我想限制对应用程序的访问。我不希望用户在我的应用上创建个人资料并在线发布,因为他们可能是“恶意”用户。

解决方案一?:创建帐户后,我是否可以立即将用户注销,并将其引导至包含模板消息的路径“请检查您的电子邮件并验证您的电子邮件。”

然后,在Accounts.onLogin上,检查是否验证了用户电子邮件。

server.js

 if ( user.user.emails.verified === false ) {
     //render please verify email template
      }
      else  {
       //continue as usual
       }



Accounts.config({
 sendVerificationEmail: true,
 forbidClientAccountCreation: false,
 loginExpirationInDays: null
});

我缺少一种更简单,更合乎逻辑的方法吗?

3 个答案:

答案 0 :(得分:2)

如果您使用的是铁路由器,则可以添加前挂钩:

Router.onBeforeAction(function(){
  if (Meteor.loggingIn()){
    this.render('loading');
  } else if (Meteor.user() && !Meteor.user().emails[0].verified){
    this.render('verification');
  } else {
    this.next();
  }
});

答案 1 :(得分:1)

如果您使用的是铁路由器,则可以向路由添加逻辑,以便在您登录时根据您是否已确认重定向。这也将解决用户注册后“立即注销”的问题。这听起来不像是最好的用户体验。使用一点逻辑进行路由可以解决这个问题。

答案 2 :(得分:1)

你可能已经解决了这个问题,但我认为分享一些提供更好解决方法的链接是值得的。他们与路由器无关,并利用Accounts包中已有的方法。

[#1]通过检查用户的电子邮件验证状态来阻止服务器发布的数据,以确保没有数据泄露:https://stackoverflow.com/a/15384012/3112047

[#2]如果布尔参数设置为 false ,则使用Accounts.validateLoginAttempt阻止登录尝试:https://stackoverflow.com/a/24940581/3112047