1

我正在处理我的应用程序的注册部分。在服务器端创建新用户后,我调用Accounts.sendEnrollmentEmail(). 我收到带有如下链接的电子邮件:

http://localhost:3000/enroll-account/XqMb6mqZQ3cGfyOgQgtWvLPqzVJ-qJeBYJ_I46mNE9c

并在 Iron Router 中创建了一个路由来处理它并显示一个“选择密码”表单,如下所示:

路线:

...
this.route('enrollAccount', {
    path: '/enroll-account/:token',
    data: function() { return this.params.token; }
});
...

报名模板:

<template name="enrollAccount">
    <div class="panel panel-default">
        <div class="panel-body">
            <p>Please enter a password and click 'Enroll Account'</p>
            <div class="form-control">
                <label for="password">Enter Password</label>
                <input type="password" id="password" name="password" />
            </div>
            <div class="form-control">
                <label for="reenterPassword">Re-enter Password</label>
                <input type="password" id="reenterPassword" name="reenterPassword" />
            </div>
            <button class="btn btn-primary" id="btnEnroll">Enroll Account</button>
        </div>
    </div>
</template>

和 JS:

Template.enrollAccount.events({
    'click #btnEnroll': function(event, tmpl) {
        event.preventDefault();
        console.log('Enrolling with token ', this);
        Accounts.resetPassword(this, tmpl.$('#password').val(), function(err) {
            if (err) {
                // TODO Toss some error
                console.log('Error: ', err);
            } else {
                console.log('Enrollment successful, going home...');
                Router.go('home');
            }
        });
    }
});

当我输入注册 URL 时,我得到了很好的表格,填写它,单击按钮并让 console.log 说它正在发送。我还验证了令牌与数据库中的内容匹配。但是,调用Accounts.resetPassword()永远不会执行回调函数。浏览器控制台中既没有错误也没有 else 登录。在 MongoDB 中选择用户显示仍然没有设置密码,并且它仍然有一个 services->password->reset 具有相同的令牌。我确定我错过了一步,但我不知道是什么。

4

1 回答 1

2

Iron Router 传递给模板的对象似乎并不是真正的字符串。当我打印出来时,它看起来像一个字符串,但如果我这样调用重置:

Accounts.resetPassword(this.toString(), tmpl.$('#password').val(), function(err)...

然后它按预期工作。

于 2014-11-03T12:27:28.853 回答