4

autoform、collection2、および単純なスキーマを使用して作成された挿入フォームがあります。このcreatedByフィールドには、autovalue を使用して userId が入力されます。挿入に使用するとフォームは機能しmeteor.allow()ましたが、許可をメソッドに置き換えて、ユーザーロールの検証、つまりユーザーに管理者権限があることを確認したかったのです。createdByしかし、フィールドが空であるというエラーが表示されます。

開発ツールのエラーは次のとおりです。

エラー: 400、理由: "作成者が必要です"、詳細: 未定義、メッセージ: "作成者が必要です [400]"、errorType: "Meteor.Error"}

Courses = new Mongo.Collection('Courses');

courseSchema  = new SimpleSchema({
    title: {
        type: String,
        label: "Course Title"
    },
    description: {
        type: String,
        label: "Description"
    },
    createdAt: {
        type: Date,
        autoValue: function(){
            return new Date();
        },
        autoform:{
            type: 'hidden'
        }
    },
    startDate:{
        type: String,
        label: "Start Date"
    },
    sessions: {
        type: String,
        label: "No. of sessions"
    },
    duration: {
        type: String,
        label: "Duration of the course"
    },
    price: {
        type: String,
        label: "Course Price"
    },
    createdBy:{
        type: String,
        autoValue:function(){
            return this.userId;
        },
        autoform:{
            type:'hidden'
        }
    }
});

Courses.attachSchema(courseSchema);

メソッド (クライアントとサーバーで利用可能):

Meteor.methods({
    addCourse: function(course){
        Courses.insert(course);
    }
});

フォームが生成されるテンプレート:

<template name="adminIndex">
   <h1>Available Courses</h1>
   {{> courseList }}    
   <button type="button" class="btn btn-success btn-block">Create New Course</button>
   <h3>Create New Course</h3>
   {{>quickForm id="InsertCourseForm" collection="Courses" type="method" meteormethod="addCourse"}}
</template>
4

2 に答える 2

1

Courses.simpleSchema().clean(course);自動値とデフォルト値を安全に追加するには、サーバー メソッドを呼び出してオブジェクトを消去する必要があります。また、this.userId関数内autoValuenullサーバーが開始するアクション用であるため、おそらくMeteor.userId().

check(value, pattern)さらに、クライアント側の検証がバイパスされる可能性があるため、Meteor メソッドを呼び出して独自の検証を実行する必要があります。

例えば:

if (Meteor.isServer) {
  Meteor.methods({
    addCourse: function(course) {
      Courses.simpleSchema().clean(course);
      check(course, Courses.simpleSchema());
      Courses.insert(course);
    }
  });
}
于 2016-02-19T08:21:19.677 に答える