尝试在我的meteor应用程序中实现密码恢复。
我可以生成指向我的应用的恢复电子邮件:
onemore.meteor.com/#/reset-Password/[token]
当我点击此链接时,它会转到该网址,但该网址会立即重写为onemore.meteor.com/#
当我输入Session.get("resetPassword")
时,它会返回undefined
我知道令牌有效。如果我在电子邮件中复制链接的后半部分" [token]"并将其粘贴到控制台中,如Session.set("resetPassword",[token])
,密码恢复表单按预期运行。
为什么我的网址会重写onload?这会发生吗?在重写之前我需要解释这个吗?
由于
答案 0 :(得分:2)
您可以尝试使用以下内容删除#reset URL:
Meteor.startup(function () {
Accounts.emailTemplates.resetPassword.text = function (user, url) {
url = url.replace('#/', '')
return " To reset your password, simply click the link below:\n\n"
+ url;
};
});
答案 1 :(得分:1)
您可以如下设置URL:
Meteor.startup(() => {
Accounts.urls.resetPassword= (token) => {
return Meteor.absoluteUrl('reset-password/' + token);
};
});
那比替换整个电子邮件文本更好。
答案 2 :(得分:0)
我认为您需要自己添加路线。
对于带有coffeescript的铁制路由器,可能会喜欢
Router.route '#/reset_password/:token',
name: 'reset_password'
onBeforeAction: ()->
if Meteor.userId() then this.redirect('/') else this.next()
Accounts._resetPasswordToken = this.params.token
您还应该添加reset_password模板。
答案 3 :(得分:0)
我有这个问题已经很久了,终于解决了。
事实证明,执行重置密码的过程会在会话变量中存储resetPasswordToken。
就我而言,每当userId发生变化时,我都会清除所有会话变量,这会消除令牌,禁止对话框出现。
我现在只清除我使用的会话变量(而不是调用Session.clear()),最终解决了问题。