我目前正在使用插件" accounts-password"通过命令
安装它meteor add accounts-password
我已经运行了程序等,并且能够添加数据;但是,当我尝试使用
在浏览器上调用或显示数据时{{ currentUser.email }}
和
{{ currentUser.password }}
它没有显示,但是当我打电话时
{{ currentUser.username }}
它运作得很好。我试图通过find()。fetch();来访问数据库。这就是我所看到的。
id: "GP26SF2F8jmpqQuvT"
emails: Array[1]
0: Object
address: "testing@gmail.com"
verified: false
__proto__: Object
length: 1
__proto__: Array[0]
username: "testing"
__proto__: Object
根据安排,我应该将电子邮件称为
{{ currentUser.emails.0.address }}
?另外,我没有在数据中看到密码,有没有办法检索它?实际上我的目标是在用户想要更改密码或电子邮件地址时更新Meteor.users。感谢。
答案 0 :(得分:2)
accounts-password
不会发布文档的password
字段。这是出于预期 - 出于安全原因!
关于电子邮件:accounts
包允许应用程序向用户添加多个电子邮件。这就是为什么会有一系列电子邮件。
而不是做
{{ currentUser.emails.0.address }}
您可以做的是为模板添加一个帮助器:
Template.myTemplate.helpers({
email: function(){
return Meteor.user().emails[0].address;
}
});
然后你可以在模板中使用它:
{{ email }}
实际上我的目标是在用户想要更改密码或电子邮件地址时更新Meteor.users。感谢。
我说几乎没有理由将用户的密码发布到客户端。这是一个巨大的安全风险。 accounts-password
包已经处理了常见的用例,因此您只需在客户端上使用Accounts.changePassword()
即可允许用户更改其密码。
如果您想允许用户更改其电子邮件,您要执行的操作是使用Method。客户端可以调用方法,但代码在服务器上执行。执行完毕后,服务器会向客户端返回响应。有点像HTTP的工作方式。
在这种情况下,客户端可以调用名为changeEmail
的方法,该方法会尝试更改用户的电子邮件。如果所有支票都通过等,则服务器会更改用户的电子邮件并返回响应,例如"success"
,否则返回"fail"
。这就是代码的样子:
if(Meteor.isClient){
Meteor.call('changeEmail', newEmail, function(error, response){
if(error){
console.error(error);
} else {
console.log(response);
}
});
}
if(Meteor.isServer){
Meteor.methods({
changeEmail: function(newEmail){
Accounts.addEmail(this.userId, newEmail, false);
var userEmails = Meteor.users.findOne(this.userId, {fields: {emails: 1}}).emails;
if(userEmails.length > 1){
Accounts.removeEmail(this.userId, userEmails[0].address);
Accounts.sendVerificationEmail(this.userId, newEmail);
return "success";
} else {
throw new Meteor.Error('fail', 'email not correct!');
}
}
});
}
如果您不熟悉方法,可以阅读Meteor的this教程或this文章。此外,我的代码可能不是100%功能,它只是一个例子。