2

ユーザーが複数のステップの登録プロセスに従うMeteorアプリに取り組んでいます。彼らはまずサインアップし、ダッシュボードにアクセスする前に3 つのカスタマイズされたフォームを通過します。update-mode とCollection2でAutoformを使用して、さまざまなフォームを検証しています。サインアップ後、ユーザーは各フォームで必要な値を更新し、フィールド/入力エラーは Collection2 によって処理されます。

私の問題は次のとおりです。すべてのフィールドとサブフィールドをオプションとして設定してプロジェクトを開始しましたが、それらを必須にしたいので、Collection2 も不足している入力を処理します。しかし、オプションのオプションを削除しても、フォームは正しく更新され、空のフィールドを処理できるようになりましたが、ユーザーは登録できなくなりました。

Exception while invoking method 'createUser' Error: First name is required

私は現在 Meteor.createUser クライアント側を呼び出しています。Meteor.createUser が挿入時にオプションではないすべてのフィールドをチェックするのを防ぐ方法があるのだろうかと思います。サーバー側と呼べることはわかっていますが、送信時にパスワードを暗号化する必要があり、そこから C2 検証をバイパスできるかどうかさえわかりません。

ユーザーが最初にサインアップしてから、フォームに記入するために続行するか、終了して戻ってくることが非常に重要です。最後のフォームで createUser を使用するか、オプションをすべて元に戻して、各フィールドでカスタム検証を行うことができることはわかっていますが、「よりきれいな」方法を探しています。どんな入力でも大歓迎です!

4

1 に答える 1

0

多くのテストの後、最終的に回避策を見つけました。オプションのネストされたスキーマに必須フィールドを設定して、挿入時に検証が失敗しないようにします。

また、オプションのネストされたスキーマの最初から自動値または値が作成されていないことを確認してください。そうしないと、それが作成されてから検証がトリガーされます(両方とも私の場合で、フォーム進行トラッカーに自動値がありました新しいステップごとに設定および更新されます)。


具体例を次に示します。

Posts = new Mongo.Collection("posts");

var Schema = {};
Schema.Replies = new SimpleSchema({
    owner: {
        type: String
    },
    content: {
        type: String
    }
});

Schema.Posts = new SimpleSchema({
    createdAt: {
        type: Date,
        autoValue: function() {
            if (this.isInsert)
                return new Date();
            else if (this.isUpsert)
                return {$setOnInsert: new Date()};
            else
                this.unset();
        },
        optional: true
    },
    content: {
        type: String
    },
    replies: {
        type: [Schema.Replies],
        optional: true
    },
    owner: {
        type: String,
        autoValue: function() {
            if (!this.isSet) {
                return this.userId;
            }
        }
    },
});

Posts.attachSchema(Schema.Posts);

したがって、Postに返信を含めることも、含めないこともできます。ただし、返信を追加する場合、ネストされたスキーマのすべての必須フィールドに入力する必要があります。そうしないと、更新が拒否されます。このロジックは何にでも複製できます (つまり、私の場合、Meteor.userサインアップ フォームが更新されるにつれて更新されます)。それが役に立てば幸い。

于 2015-07-30T09:54:40.687 に答える