2016-07-25 10 views
0

私はuseraccounts:unstyled,accounts-base,accounts-passwordを利用しており、パスワードリセット機能を実装しようとしています。パスワードリセットトークンがnullを返していますが、定義済みですが

私のような私のルートを定義している

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 />) 
    }); 
    } 
}); 

マイテンプレートは、次のように定義される。

<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> 

のように定義私のヘルパー関数:Iを提出クリックすると

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

Error: Match error: Expected string, got null (unknown)を取得してください。

ルートを有効なトークンでロードしてSession.get('resetPasswordToken')を実行すると、トークンが有効に返されますが、

答えて

0

この方法で試してください: FlowRouter.route( '/#/ reset-password /:token'); これは、パスワードをリセットするためのデフォルトルートです。

0

私は数日間これを取得していましたが、それを理解することができませんでした...そして、いくつかの並べ替えの後、それは最終的に働いた。

パスワードをリセットするためにMeteorのデフォルトルート&フォームを使用する必要はありません。

あなたはフシギダネ奪わ近い@Sleepなら、あなたのルートは次のようになります。

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

を私はonBeforeAction、Accounts._resetPasswordToken、またはthis.next()を必要としなかった、とそれだけで正常に動作します自動的にログインします。

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!'); 
    } 
    }); 
} 

あなたのテンプレートは、このような何かを持っている必要があります

関連する問題