我向用户发送了注册电子邮件,当他输入密码和其他详细信息时,我试图重置密码但是却抛出了错误
uncaught error extpected to find a document to change
正如你在法师中看到的那样
我订阅了用户记录
我的代码
this.route('enroll', {
path: '/enroll-account/:token',
template: 'enroll_page',
onBeforeAction: function() {
Meteor.logout();
Session.set('_resetPasswordToken', this.params.token);
s = this.subscribe('enrolledUser', this.params.token).wait();
}
}),
在我显示表单和提交事件后
onSubmit: function(creds) {
var options = {
_id: Meteor.users.findOne()._id,
name: creds.name
}
var token=Session.get('_resetPasswordToken');
Meteor.call('updateUser', options, function(error, result) {
if(!error) {
Accounts.resetPassword(token, creds.password, function(error) {
if (error) {
toastr.error("Sorry we could not update your password. Please try again.");
return false;
}
else{
toastr.error("Logged In");
Router.go('/');
}
});
} else {
toastr.error("Sorry we could not update your password. Please try again.");
return false;
}
});
this.resetForm();
this.done();
return false;
}
一切正常,但resetpassword回调未触发,上述错误显示在控制台中。
我的令牌已从用户记录中删除,我可以使用登录表单登录,但
来自文档
Reset the password for a user using a token received in email. Logs the user in afterwards.
重置密码后我无法自动登录,上面的错误正在抛出
我在这里缺少什么?
答案 0 :(得分:5)
this.subscribe('enrolledUser', this.params.token).wait();
这里您使用resetPassword令牌订阅
当您调用Accounts.resetPassword
方法时,该方法将重置密码并从用户记录中删除令牌。
因此您的订阅将丢失,并且客户端中没有可用于修改的记录
(这是错误Expected to find a document to change
)
而是在第一次订阅时使用Id
所以订阅不会丢失
path: '/enroll-account/:token',
template: 'enroll_page',
onBeforeAction: function() {
Meteor.logout();
Session.set('_resetPasswordToken', this.params.token);
s = this.subscribe('enrolledUser', this.params.token).wait();
},
onAfterAction:function(){
if(this.ready()){
var userid=Meteor.users.findOne()._id;
Meteor.subscribe("userRecord",userid);
}
}
答案 1 :(得分:1)
或者,您可以在出版物中执行以下操作。这对我有用(但我的查询比这更复杂)。
Meteor.publish('enrolledUser', function (token) {
check(token, String);
return Meteor.users.find({
$or: [{
_id: this.userId
}, {
'services.password.reset.token': token
}]
});
});
来自文档,它说
使用电子邮件中收到的令牌重置用户的密码。 之后将用户登录。
所以基本上,你必须在事后订阅登录用户。有点傻,但无论如何。