我正在按照Meteor #20: Verify an Email with Meteor Accounts尝试Meteor的电子邮件验证功能。
我对第3步和第4步有一些疑问:
在第3步中,Accounts.sendVerificationEmail(user._id);
不起作用,而Accounts.sendVerificationEmail(user._id, user.emails[0].address);
有效。为什么我需要明确指定电子邮件地址?
在第4步中,我应该将Template.Homepage.created = ...
中的“主页”修改为我的主页模板名称吗?
在Meteor 1.0.4的文档中,我在“Template.myTemplate”下找不到名为“created”的属性。
那么,如果Template.Homepage.created = ...
已被弃用?
写作Template.<myhomeTemplateName>.onCreated = ...
是否正确?
这是验证电子邮件的最佳解决方案吗?
答案 0 :(得分:0)
从Meteor docs开始,如果未指定电子邮件,则电子邮件必须位于emails
用户,且必须取消验证。如果您已经验证了地址,则除非明确指定地址,否则不会发送电子邮件。
电子邮件字符串 可选的。 发送电子邮件的用户的哪个地址。该地址必须位于用户的电子邮件列表中。默认为列表中第一个未验证的电子邮件。
是
Template.HomePage.onCreated(function(){...});
答案 1 :(得分:0)
对于Meteor 1.0.5,请使用
Template.<yourTemplate>.onCreated(function() { ... })
而不是
Template.<yourTemplate>.created = ...
在Meteor #20: Verify an Email with Meteor Accounts的第4步中。
以下演示在Meteor 1.0.5下运行良好。
verifyEmail.html:
<head>
<title>Verify Email</title>
</head>
<body>
<h1>Sending Email Demo</h1>
{{> loginButtons}}
</body>
verifyEmail.js :(替换您的案例的用户,密码和服务器值)
if (Meteor.isClient) {
Template.SendAnyEmail.onCreated(function() {
if (Accounts._verifyEmailToken) {
Accounts.verifyEmail(Accounts._verifyEmailToken, function(err) {
if (err != null) {
if (err.message = 'Verify email link expired [403]') {
console.log('Sorry this verification link has expired.')
}
} else {
console.log('Thank you! Your email address has been confirmed.')
}
});
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
smtp = {
username: 'user@example.com',
password: 'password',
server: 'mail.example.com',
port: 465
};
process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.server) + ':' + smtp.port;
Accounts.emailTemplates = {
from: 'Administrator <user@example.com>',
siteName: 'YourSite',
verifyEmail: {
subject: function(user) {
return 'Verification email from Example.com';
},
text: function(user, url) {
return 'Hi,\n' +
'Please open the link below to verify your account on Example.com:\n' + url;
}
}
};
});
Accounts.onCreateUser(function(options, user) {
Meteor.setTimeout(function() {
Accounts.sendVerificationEmail(user._id);
}, 2 * 1000);
return user;
});
}
答案 2 :(得分:0)
在您的server/main.js
中,只需设置Meteor.startup
块之外的任何位置即可。
Accounts.config({
sendVerificationEmail: true
});