login - 在登录meteor之前强制进行电子邮件验证

标签 login meteor

我用

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

创建用户时发送电子邮件验证。然而,当用户注册时,他们在验证他们的邮件之前被允许进入产品,这是我不想要的。

我尝试通过创建一个模板变量来破解它,该变量在用户验证时为真,但用户信息在模板渲染后到达,甚至使用 meteor 。 setTimeout() 数据到达时我无法更新模板。

有什么关于正确方法的建议吗?

发送

最佳答案

首先,你需要让你的数据“不可破解”,看看发布功能:http://docs.meteor.com/#meteor_publish

因此,在您的产品的 Meteor.publish 函数中,您应该执行以下操作:

这确保客户只有在登录并拥有经过验证的帐户后才能看到产品。他们仍然可以登录,但在验证他们的帐户之前无法看到产品。

服务器js

Meteor.publish("productinfo", function () {
  user = Meteor.users.findOne({_id:this.userId})
  if(user) {
      if(user.emails[0].verified) {
          //You can put some extra logic in here to check which product the user has, if you're selling or something like that
          return Products.find({});
      }
   }
});

请记住,您需要删除 autopublish meteor 使用哪个让生活更轻松,它基本上将所有集合发布给用户,但是您想限制某些信息,因此您应该将其删除

其次,您需要处理模板上的数据,以便如果用户未登录模板内容将不可见。因此,即使在浏览器最初加载的那一步中,他们也看不到产品

客户端JS
Meteor.subscribe("productinfo");

Template.products.products = function() {
  if(Meteor.userId()) {
    if(Meteor.user().emails[0].verified) {
        return Product.findOne({_id:"your product id"});
    }
  }
}

这样模板助手会检查用户是否已登录以及他们是否拥有经过验证的帐户。此外,如果在客户端更改代码,由于发布功能,他们将看不到产品。

关于login - 在登录meteor之前强制进行电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15383273/

相关文章:

javascript - Meteor 将 id 传递到链接中

javascript - METEOR 帐户 UI 登录按钮未显示在移动应用程序包装中

R/ Shiny 用户注册/认证

asp.net - SCRIPT5022 : Sys. WebForms.PageRequestManagerServerErrorException:输入字符串的格式不正确

curl: (48) 一个未知的选项被传递给 libcurl

javascript - 使用 meteor 模板助手获取 DOM 元素

sql-server - 在用户的默认数据库脱机后,如何重新获得对 MS SQL Server 的访问权限?

login - phpMyAdmin 的登录名是什么?

forms - 成功登录Tomcat表单后重定向

javascript - 将 Meteor 与 MongoDB 结合使用