我想知道如何在 Meteor 中更改用户个人资料信息。我使用 accounts-base 包创建了一个应用程序,因此我可以使用用户帐户快速管理所有相关内容。这真的很棒。
在官方文档中它说:
profile:一个对象(默认情况下)用户可以使用任何数据创建和更新。
但是我怎么能让用户改变它呢?
关于同一主题,{{loginButtons}}
默认情况下使用标签,当用户登录时,我得到以下图像:
有没有可能添加Change profile
或Change email
类似的东西?
谢谢
我想知道如何在 Meteor 中更改用户个人资料信息。我使用 accounts-base 包创建了一个应用程序,因此我可以使用用户帐户快速管理所有相关内容。这真的很棒。
在官方文档中它说:
profile:一个对象(默认情况下)用户可以使用任何数据创建和更新。
但是我怎么能让用户改变它呢?
关于同一主题,{{loginButtons}}
默认情况下使用标签,当用户登录时,我得到以下图像:
有没有可能添加Change profile
或Change email
类似的东西?
谢谢
目前accounts-ui
没有内置更改配置文件按钮,您必须手动进行。
例如,如果你这样做
Meteor.users.update({_id:Meteor.user()._id}, {$set:{"profile.name":"Carlos"}})
您可以更改上面的屏幕,accounts-ui
您必须显示名称而不是您要单击以显示上面对话框的电子邮件。
电子邮件有点棘手,您必须从服务器执行此操作,因为(可能在 meteor.methods/call 中)您无法修改来自客户端的电子邮件内容,我建议添加新电子邮件并对其进行验证而不是更改现有的电子邮件(因为它也是他们的登录名)。或者先对其进行验证,然后再对其进行更改,以免将某人的电子邮件更改为无法恢复密码的内容。
Meteor.users.update({_id:Meteor.user()._id}, {$addToSet:{"emails":{address:"newemail@newemail.com","verified":false}}});
或者,如果您希望用户拥有一封电子邮件,他们可以更改:
Meteor.users.update({_id:Meteor.user()._id}, {$set:{"emails":[{address:"newemail@newemail.com"}]});
要扩展此答案,最好将此代码放入(已验证) Meteor 方法中。
// imports/api/methods.js
const NO_SPECIAL_CHARACTERS_REGEX = /^[^`~!@#$%^&*()_|+=?;:'"<>{}\[\]\\/]*$/;
export const updateProfileName = new ValidatedMethod({
name: 'users.updateProfileName',
mixins: [CallPromiseMixin],
validate: new SimpleSchema({
name: { type: String, regEx: NO_SPECIAL_CHARACTERS_REGEX, min: 1, max: 50 },
}).validator(),
run({ name }) {
if (!this.userId) {
throw new Meteor.Error('User needs to be signed in to call this method');
}
return Meteor.users.update({ _id: this.userId }, { $set: { 'profile.name': name } });
},
});
然后在前端
// imports/ui/changeName.js
Template.changeName.events({
// ...
async 'submit #change-name-form'(event, instance) {
event.preventDefault();
try {
await updateProfileName.callPromise({ name: instance.$('#profile-name').val() });
} catch (e) {
// do something with the error
}
},
});