我正在使用useraccounts:unstyled
,accounts-base
,accounts-password
并尝试实施密码重置功能。
我的路线定义如下:
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>
我的帮助函数定义为:
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 :(得分:0)
请尝试使用这种方式: FlowRouter.route(&#39; /#/复位密码/:令牌&#39); 这是重置密码的默认路由。
答案 1 :(得分:0)
我得到了这几天,无法解决这个问题......然后经过一些重新安排后,它终于奏效了。
你不必使用Meteor的默认路线&amp;重置密码的表单。
你关闭了@Sleep Deprived Bulbasaur,你的路线应该是这样的:
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!');
}
});
}