10

Meteorでユーザープロファイル情報を変更する方法を知りたいです。私はaccounts-baseパッケージを使用してアプリケーションを作成したので、ユーザーアカウントで関連するすべてのものをすばやく管理できます。これは本当に素晴らしいです。

公式ドキュメントでは、次のように述べています。

プロファイル:(デフォルトで)ユーザーが任意のデータを作成および更新できるオブジェクト。

しかし、どうすればユーザーに変更させることができますか?

同じトピックに関して、{{loginButtons}}デフォルトでタグを使用すると、ユーザーがログインしたときに次の画像が表示されます。

ここに画像の説明を入力してください

Change profile追加する可能性はありますChange 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}}});

または、ユーザーに1つのメールを送信させたい場合は、次のように変更できます。

Meteor.users.update({_id:Meteor.user()._id}, {$set:{"emails":[{address:"newemail@newemail.com"}]});
于 2013-01-26T12:34:52.320 に答える
0

この答えを拡張するには、このコードを(検証済みの) Meteorメソッドに配置することをお勧めします。

  • CallPromiseMixinを使用して、フロントエンドでasync/await構文を使用してこのメ​​ソッドを呼び出します
  • simpl-schemaを使用してユーザー名引数を検証します
// 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 に答える