流星重置密码 - 点击电子邮件链接不起作用

时间:2014-06-18 21:37:01

标签: url hash meteor token

尝试在我的meteor应用程序中实现密码恢复。

我可以生成指向我的应用的恢复电子邮件:

onemore.meteor.com/#/reset-Password/[token]

当我点击此链接时,它会转到该网址,但该网址会立即重写为onemore.meteor.com/#

当我输入Session.get("resetPassword")时,它会返回undefined

我知道令牌有效。如果我在电子邮件中复制链接的后半部分" [token]"并将其粘贴到控制台中,如Session.set("resetPassword",[token]),密码恢复表单按预期运行。

为什么我的网址会重写onload?这会发生吗?在重写之前我需要解释这个吗?

由于

4 个答案:

答案 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;
  };
});

另见How do you change the reset password URL in meteor?

答案 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()),最终解决了问题。