2015-09-10 5 views
0

Я пытаюсь реализовать функцию «сбросить пароль» в своем приложении Meteor. У меня очень простая реализация на основе этого учебника: Julien's tutorial on gentlenodeMeteor: resetPassword поведение ссылки по электронной почте

Существует несколько примеров, которые используют этот же базовый подход. Я сделал это почти так же, как Жюльен, но я использовал только один шаблон; Я использую {{#if}} в своем шаблоне, который отображает форму «сбросить пароль», если моя переменная сеанса sResetPassword не является ложной. (Я не знаю, как правильный шаблон должен отображаться в примере Жюльена, и он не работает для меня, поскольку он написан - шаблон не изменяется.)

Вот критическая часть кода , Два разных метода, которые работают на моем локальном приложении, но ни один из них не работает в моем приложении (модуле).

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

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

На моей развернутой версии (Modulus), ссылка открывает мое приложение и просто идет прямо на стартовом экране. Когда я проверяю значение моего сеанса sResetPassword var, он не определен, поэтому как-то значение маркера никогда не попадает в var.

В то время как мы по теме, кто-нибудь знает, как вы должны получать правильный шаблон для загрузки, когда вы используете отдельный шаблон для формы пароля сброса?

ответ

0

ОК, по какой-либо причине, заменив железо-маршрутизатор с потоком-маршрутизатором фиксированной этот вопрос для меня. Я создал новое приложение только с функциями входа и сброса пароля, и он работал нормально. Я добавил железо-маршрутизатор, и снова он работал, но только режим dev. Когда я запустил его в режиме производства, проблема вернулась. Замененный железный маршрутизатор с маршрутизатором потока (как в тестовом приложении, так и в моем полном приложении), и теперь проблема исчезла. Ссылка на сообщение работает как ожидалось в обоих режимах.

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> 

+0

Спасибо, Мишель Х. Посмотрев на свой код, я добавил заявление Router.go, заключенное в setTimeout(). И с этим изменением я кратко просмотрел правильный шаблон после нажатия на ссылку. Но затем приложение направилось прямо к стартовому экрану. Поэтому я все еще экспериментирую. Кстати, что это интересная конструкция:() => в вашем коде? Он не компилируется для меня. –

+0

Свойство TypeScript, оно сохраняет внешнее «это», просто используйте функцию(). – MichelH

Смежные вопросы