我对如何使用Accounts.onEmailVerificationLink感到有点困惑。 文档有点含糊不清:
Accounts.onEmailVerificationLink(回调)
在Accounts.sendVerificationEmail发送的电子邮件中点击电子邮件验证链接时,注册要呼叫的功能。 此函数应在顶级代码中调用,而不是在Meteor.startup()内调用。
“this function”,回调或Accounts.onEmailVerificationLink本身究竟是什么意思?
无论如何,无论我把东西放在哪里,我总是在浏览器控制台上收到此错误消息:
Accounts.onEmailVerificationLink was called more than once. Only one callback added will be executed.
答案 0 :(得分:3)
如果您使用集合挂钩(https://atmospherejs.com/matb33/collection-hooks),您可以执行以下操作:
Meteor.users.after.update(function (userId, doc, fieldNames, modifier, options) {
if (!!modifier.$set) {
//check if the email was verified
if (modifier.$set['emails.$.verified'] === true) {
//do something
}
}
});
在花了一些时间试图挂钩onMailVerificationLink之后,我觉得上面的内容不那么挑剔了。
答案 1 :(得分:-1)
if (Meteor.isClient) {
//Remove the old callback
delete Accounts._accountsCallbacks['verify-email'];
Accounts.onEmailVerificationLink(function (token, done) {
Accounts.verifyEmail(token, function (error) {
if (!error) {
//Do stuff
}
done();
});
});
}
答案 2 :(得分:-1)
它所指的功能是' onEmailVerificationLink'一。它需要在一些高级客户端代码中。 使用下面的代码,我可以在验证电子邮件后更改功能:
// Override the method that fires when the user clicks the link in the verification email
// for our own behavior.
Accounts.onEmailVerificationLink((token, done) => {
Accounts.verifyEmail(token, (err) => {
if (err) {
console.log("Error: ", err);
} else {
console.log("Success");
// Do whatever you want to on completion, the
// done() call is the default one.
done();
}
});
});
仍会显示控制台消息,但已覆盖的代码会运行。
答案 3 :(得分:-2)
如果可以,你应该删除帐户:ui package,也可以使用它
meteor remove accounts:ui
然后使用回调添加自己的逻辑
Accounts.onEmailVerificationLink(function(token, done) {
//your own logic
//Accounts.verifyEmail(token, (error){
// if(!error) {
// alert('done!');
// }
//});
});