2016-07-25 5 views
0

useraccounts:unstyled, accounts-base, accounts-password을 사용하고 있으며 비밀번호 재설정 기능을 구현하려고합니다. I 제출을 클릭하면비밀번호 재설정 토큰이 null을 반환합니다. 정의 됨에도 불구하고

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

:

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> 

그리고 내 도우미 기능으로 정의

나는 나의 길과 같은 정의가 Error: Match error: Expected string, got null (unknown)을 얻으십시오.

유효한 토큰을 사용하여 경로를로드하고 Session.get('resetPasswordToken')을 실행하면 토큰이 유효하게 반환됩니다.

답변

0

다음과 같이 시도하십시오. FlowRouter.route ('/ #/reset-password/: token'); 비밀번호 재설정을위한 기본 경로입니다.

0

나는 이것을 며칠 동안 알아 차릴 수 없었습니다 ... 일부 재구성 작업을 마침내 마쳤습니다.

그리고 암호를 재설정하기 위해 Meteor의 기본 경로 & 양식을 사용할 필요가 없습니다.

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

내가 onBeforeAction, Accounts._resetPasswordToken, 또는 this.next()를 필요로하지 않았다, 그리고 그것을 잘 작동합니다 :

당신은 이상해 씨 박탈 가까운 @Sleep있어, 경로는 다음과 같이한다 자동으로 로그인합니다.

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

템플릿이 이런 식으로 뭔가를해야한다