Meteor - เผยแพร่และสมัครสมาชิก

ตามที่กล่าวไว้แล้วในบทคอลเลกชันข้อมูลทั้งหมดของเรามีอยู่ในฝั่งไคลเอ็นต์ นี่เป็นปัญหาด้านความปลอดภัยที่สามารถจัดการได้ด้วยวิธีการเผยแพร่และสมัครสมาชิก

กำลังลบการเผยแพร่อัตโนมัติ

ในตัวอย่างนี้เราจะใช้ PlayersCollectionรวบรวมข้อมูลต่อไปนี้ เราเตรียมคอลเลคชันนี้มาก่อนเพื่อให้สามารถมีสมาธิกับบทนั้น ๆ หากคุณไม่แน่ใจว่าจะสร้างคอลเลกชัน MongoDB ในแอพ Meteor ได้อย่างไรให้ตรวจสอบบทคอลเลกชันของเรา

เพื่อรักษาความปลอดภัยข้อมูลของเราเราจำเป็นต้องลบ autopublish แพ็คเกจที่อนุญาตให้เราใช้ข้อมูลในฝั่งไคลเอ็นต์

C:\Users\username\Desktop\meteorApp>meteor remove autopublish

หลังจากขั้นตอนนี้เราจะไม่สามารถรับข้อมูลฐานข้อมูลจากฝั่งไคลเอ็นต์ได้ เราจะสามารถเห็นได้จากฝั่งเซิร์ฟเวอร์ในหน้าต่างพรอมต์คำสั่งเท่านั้น ชำระเงินรหัสต่อไปนี้ -

eorApp.js

var PlayersCollection = new Mongo.Collection('playersCollection');
var myLog = PlayersCollection.find().fetch();
console.log(myLog);

command prompt หน้าต่างจะแสดงคอลเล็กชันทั้งหมดพร้อมวัตถุสี่ชิ้นในขณะที่ไฟล์ developers consoleจะแสดงอาร์เรย์ว่าง ตอนนี้แอปของเราปลอดภัยมากขึ้น

ใช้เผยแพร่และสมัครสมาชิก

สมมติว่าเราต้องการอนุญาตให้ลูกค้าใช้ข้อมูลของเรา สำหรับสิ่งนี้เราต้องสร้างMeteor.publish()วิธีการบนเซิร์ฟเวอร์ วิธีนี้จะส่งข้อมูลไปยังไคลเอนต์

เพื่อให้สามารถรับและใช้ข้อมูลนั้นในฝั่งไคลเอ็นต์เราจะสร้าง Meteor.subscribe()วิธี. ในตอนท้ายของตัวอย่างเรากำลังค้นหาฐานข้อมูล รหัสนี้กำลังทำงานทั้งบนไคลเอนต์และฝั่งเซิร์ฟเวอร์

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find();
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   var myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

เราจะเห็นว่าข้อมูลของเราถูกบันทึกทั้งในไฟล์ developers console และ command prompt หน้าต่าง.

การกรองข้อมูลลูกค้า

นอกจากนี้เรายังสามารถเผยแพร่ข้อมูลส่วนหนึ่ง ในตัวอย่างนี้เรากำลังเผยแพร่ข้อมูลด้วยname = "John".

var PlayersCollection = new Mongo.Collection('playersCollection');

if(Meteor.isServer) {

   Meteor.publish('allowedData', function() {
      return PlayersCollection.find({name: "John"});
   })
}

if (Meteor.isClient) {
   Meteor.subscribe('allowedData');
};

Meteor.setTimeout(function() {
   myLog = PlayersCollection.find().fetch();
   console.log(myLog);
}, 1000);

เมื่อเราเรียกใช้รหัสนี้ไฟล์ command prompt จะบันทึกข้อมูลทั้งหมดในขณะที่ฝั่งไคลเอ็นต์ console จะบันทึกวัตถุสองชิ้นที่มีชื่อ John.