我使用Meteor帐户安装了电子邮件地址验证流程。它运行正常,但是当第二次调用Accounts.sendVerificationEmail()
时,Account.verifyEmail()
方法在新令牌上调用时始终拒绝使用403:Verify email link expired
。
在再次调用该方法时,第一次调用Accounts.sendVerificationEmail()
时在Meteor.users中设置的电子邮件验证令牌不会更改:它仍然是与第一封可用的电子邮件一起发送的链接。
我在Meteor文档或互联网上找不到与此相关的任何信息。在第二次打电话给Accounts.sendVerificationEmail()
之前有什么可做的事情(比如清理什么的吗?)。
答案 0 :(得分:1)
我在实施重新发送链接到我的网站时遇到了同样的问题。我通过删除之前的所有verficationTokens
来解决这个问题。
以下是对此问题应用修复的两种方法:
Meteor.call()
方法后,将此代码放在单独的Accounts.sendVerificationEmail()
方法中:Meteor.users.update({_id: Meteor.userId()}, {'$push': services.email.verificationTokens": {$each: [], $slice: -1}}});
这将清空所有其他标记,但最新调用Accounts.sendVerificationEmail()
方法创建的最后一个标记除外。
meteor-accounts
。与步骤1)类似,将此代码放入新的Meteor.call()
方法中,并在调用Accounts.sendVerificationEmail()
方法后调用它:Meteor.users.update({_id: Meteor.userId()}, {'$pop': {"services.email.verificationTokens": -1}});
这将弹出verificationTokens
的第一个条目,因此唯一的条目留下了Accounts.sendVerificationEmail()
方法中生成的最新标记。
希望这有帮助。
答案 1 :(得分:0)
当您使用sendVerificationEmail()时,用户集合中会出现一个新条目:' services.email.verificationTokens'并且你会看到电子邮件。[x]。验证的'是假的。 当你使用verifyEmail()时,发送电子邮件。[x] .verified'转到true,并在' services.email.verificationTokens'消失。因此,如果您尝试再次使用verifyEmail(),则无法通过电子邮件验证并验证令牌被删除。 如果您使用新令牌再次发送sendVerificationEmail(),则新链接允许您使用verifyEmail()而不会显示错误消息。