10

我想知道如何在 Meteor 中更改用户个人资料信息。我使用 accounts-base 包创建了一个应用程序,因此我可以使用用户帐户快速管理所有相关内容。这真的很棒。

在官方文档中它说:

profile:一个对象(默认情况下)用户可以使用任何数据创建和更新。

但是我怎么能让用户改变它呢?

关于同一主题,{{loginButtons}}默认情况下使用标签,当用户登录时,我得到以下图像:

在此处输入图像描述

有没有可能添加Change profileChange email类似的东西?

谢谢

4

2 回答 2

29

目前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"}]});
于 2013-01-26T12:34:52.320 回答
0

要扩展此答案,最好将此代码放入(已验证) 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
        }
    },
});

于 2021-08-21T14:50:43.753 回答