Meteor:resetPassword电子邮件链接行为

时间:2015-09-10 20:41:33

标签: meteor password-recovery

我试图实施"重置密码"我的Meteor应用程序中的功能。基于本教程我有一个非常简单的实现:Julien's tutorial on gentlenode

有几个浮动的例子使用同样的基本方法。我几乎完全像朱利安那样做了我,但我只使用了一个模板;我在模板中使用了{{#if}},其中显示了重置密码'表单,如果我的会话变量sResetPassword不是假的。 (我不知道如何在Julien的例子中显示正确的模板,并且它在编写时对我不起作用 - 模板不会改变。)

这是关键代码。两种不同的方法都适用于我的本地应用程序,但两种方法都不适用于我的托管(模数)应用程序。

/* method one
if (Accounts._resetPasswordToken) {
  Session.set('sResetPassword', Accounts._resetPasswordToken);
}

/* method two
Accounts.onResetPasswordLink( function(token) { 
    Session.set('sResetPassword', token);  
});

在我部署的版本(模数)上,该链接打开了我的应用程序,直接进入开始屏幕。当我检查我的sResetPassword会话var的值时,它是未定义的,因此以某种方式,令牌的值永远不会被放入var。

虽然我们关注这个主题,但是当您使用单独的模板重置密码表单时,是否有人知道如何加载正确的模板?

2 个答案:

答案 0 :(得分:0)

以下是它对我们有用的方式。代码:

var token, done;

Accounts.onResetPasswordLink(function (t, d)
{
    token = t;
    done = d;
    setTimeout(()=>Router.go("reset_password"), 0);
});

Template["reset_password"].events({
    "click #resetBtn": function (event:Event, instance:Blaze.TemplateInstance)
    {
        var password1: string = instance.$("#input_password1").val();
        var password2: string = instance.$("#input_password2").val();
        console.log(password1, password2);
        if (password1 != password2)
        {
            return;
        }

        Accounts.resetPassword(token, password1, ()=>
        {
            done();
            Router.go("somewhere");
        });


    }
});

模板:

<template name="reset_password">
<form data-parsley-validate>
    <div class="input-field">
        <input id="input_password1" type="password" class="validate" data-parsley-trigger="keyup" data-parsley-minlength="6" data-parsley-minlength-message = "Please provide a password that is at least a 6 characters long." required>
        <label for="input_password1">New Password</label>
    </div>
    <div class="input-field">
        <input id="input_password2" type="password" class="validate" data-parsley-trigger="keyup" data-parsley-minlength="6" data-parsley-minlength-message = "Please provide a password that is at least a 6 characters long." required>
        <label for="input_password2">Again</label>
    </div>
    <button id="resetBtn" class="waves-effect btn">Reset Password</button>
</form>

答案 1 :(得分:0)

好的,无论出于何种原因,用流量路由器替换铁路由器为我解决了这个问题。我创建了一个只有登录和重置密码功能的新应用程序,它运行正常。我添加了铁路由器,它再次起作用,但只有开发模式。当我在生产模式下运行它时,问题又返回了。用流量路由器替换了铁路由器(在测试应用程序和我的完整应用程序中),现在问题已经消失。电子邮件链接在两种模式下都按预期工作。