2016-07-25 7 views
0

Ich verwende useraccounts:unstyled, accounts-base, accounts-password und versuche, eine Kennwortzurücksetzungsfunktion zu implementieren.Das Token zum Zurücksetzen des Kennworts gibt null zurück, obwohl definiert

Ich habe meine Route als solche definiert:

FlowRouter.route('/reset-password/:token', { 
    name: 'reset-password', 
    onBeforeAction: function() 
    Accounts._resetPasswordToken = this.params.token; 
    this.next(); 
    }, 
    action(params){ 
    Accounts._resetPasswordToken = params.token; 
    mount(MainLayout, { 
     content: (<ForgotPassword />) 
    }); 
    } 
}); 

Meine Vorlage als solche definiert:

<template name="ForgotPasswordModal"> 
    {{#if $not currentUser}} 
    <div class="forgot-modal {{$.Session.get 'nav-toggle'}}" id="{{checkState}}"> 
     <i class="fa fa-close resetPwd"></i> 
     {{> atForm}} 
    </div> 
    {{/if}} 
</template> 

Und meine Helferfunktionen wie folgt definiert:

if (Meteor.isClient) { 
    Template.ForgotPasswordModal.onCreated(function(){ 
    if(Accounts._resetPasswordToken){ 
     Session.set('resetPasswordToken', Accounts._resetPasswordToken); 
    }else{ 
     console.log("else"); 
    } 
    }); 

    Template.ForgotPasswordModal.helpers({ 
     checkState() { 
      return (AccountsTemplates.getState() == 'resetPwd') ? 'forgot-modal' : ''; 
     } 
    }); 

    Template.ForgotPasswordModal.events({ 
    "submit .at-btn": (event)=>{ 
     event.preventDefault(); 
     console.log(event); 
     password = document.getElementById('reset-password-new-password').value; 
     console.log("password", password); 
     if(password){ 
     Accounts.resetPassword(Session.get('resetPasswordToken'), password, (error)=>{ 
      if(error){ 
      console.log("error: ", error); 
      }else{ 
      console.log("success"); 
      Session.set('resetPasswordToken', null); 
      } 
     }); 
     } 
    } 
    }); 
} 

Upon ich einreichen klicken erhalten Error: Match error: Expected string, got null (unknown).

Obwohl wenn ich die Route nach oben (mit einem gültigen Token) laden und Session.get('resetPasswordToken') ausführen, wird das Token gültig zurückgegeben.

Antwort

0

Versuchen Sie bitte diesen Weg: FlowRouter.route ('/ #/reset-password /: token'); Dies ist die Standardroute für das Zurücksetzen des Passworts.

0

Ich bekam das für ein paar Tage, konnte es nicht herausfinden ... dann nach ein paar Umstellungen funktionierte es endlich.

Und Sie müssen nicht Meteor Standardroute & Formular zum Zurücksetzen des Passworts verwenden.

Sie sind in der Nähe @Sleep Beraubt Bulbasaur, sollten Sie Ihre Route wie folgt aussehen:

FlowRouter.route('/reset-password/:token', { 
    name: 'reset-password', 
    action(params){ 
    Session.set('_resetPasswordToken', params.token); 
    mount(MainLayout, { 
     content: (<ForgotPassword />) 
    }); 
    } 
}); 

ich nicht die onBeforeAction brauchte, Accounts._resetPasswordToken oder this.next(), und es funktioniert gut und meldet dich automatisch an.

Ihre Vorlage sollte so etwas wie dieses:

if (!validateForm(password,passwordAgain)) { 
    console.log('Your passwords dont match'); 
} else if (!isValidPassword(password, passwordAgain)) { 
    console.log('You do not have valid passwords'); 
} else { 
    let token = Session.get('_resetPasswordToken'); 
    Accounts.resetPassword(token, password, function(err) { 
    check(token, String); 
    if (err) { 
     console.log('We are sorry but something went wrong.'); 
    } else { 
     console.log('Your password has been changed. Welcome back!'); 
    } 
    }); 
} 
Verwandte Themen