我用
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/