Эффект повторения в парных множественных сравнениях в модели GLM

Моя история с этим: я продолжил, как говорит документация, но столкнулся с странным поведением. У меня была функция публикации, где я опубликовал весь профиль и объект электронной почты для текущего пользователя (скажем, userData) и просто некоторое подмножество для других пользователей (allUserData).

Когда у меня было -

Meteor.subscribe("allUserData");
Meteor.subscribe("userData");

На стороне клиента сразу после входа пользователя я получил только данные allUserData. Это означает даже для моего зарегистрированного пользователя (этот пользователь не мог видеть свой собственный адрес электронной почты). Когда я обновляю браузер, ошибка была исправлена, и я получил allUserData для всех пользователей, кроме одного входа в систему, у которого есть свой userData (с указанным адресом электронной почты).

Что интересно, если я изменил последовательность этих подписчиков, исправлена ​​ошибка .:

Meteor.subscribe("userData");    
Meteor.subscribe("allUserData");

Ввод в Meteor.autosubscribe(function () { }) ничего не изменил. Наконец, я попытался включить эту подписку в Deps.autorun(function() { }) и явно добавить реактивность, и проблема с последовательностью была решена ..:

Deps.autorun(function() {
  Meteor.subscribe("allUserData", Meteor.userId());
  Meteor.subscribe("userData", Meteor.userId());
  // or
  // Meteor.subscribe("userData", Meteor.userId());
  // Meteor.subscribe("allUserData", Meteor.userId());
}); 

В функции публикации я просто заменяю this.userId на userId из параметра.

Со следующей ошибкой, с которой я столкнулся, был тот, что у меня есть секретный объект systemData в объекте пользователя профиля, который может видеть только администраторов, а не регулярно регистрироваться в пользователях. Но хотя правильный набор функции публикации с 'profile.systemData': 0, этот секретный объект мог видеть всех зарегистрированных пользователей, которые рассматривали его объект профиля. Вероятно, это потому, что мои функции публикации каким-то образом мешали функции публикации в пакете Meteor Account:

// Publish the current user's record to the client.
Meteor.publish(null, function() {
 if (this.userId) {
   return Meteor.users.find(
     {_id: this.userId},
     {fields: {profile: 1, username: 1, emails: 1}});
 } else {
   return null;
 }
}, /*suppress autopublish warning*/{is_auto: true});

В любом случае я разрешил ее с помощью метода Account.onCreateUser() и добавил systemData рядом с объектом профиля, а не в профиль. Там начинаются мои другие проблемы :) см. Обратный вызов Meteor.loginWithPassword не предоставляет пользовательский объект в учетных записях пользователей doc

PS: Если бы я знал это с самого начала, я поставил systemData объект в специальную коллекцию.

0
задан marc_s 2 March 2019 в 08:09
поделиться