Итак, наконец-то у меня есть работа. Возможно, это не идеальный способ справиться с этим, но, насколько мне известно, это сработало для меня так хорошо. Но да, я все еще открыт для предложений.
В настоящее время у меня есть 4 подключающихся приложения, которые зависят от одной и той же базы пользователей.
Поэтому я решил создать SSO (централизованный сервер для управления базой данных пользователей)
Все 4 подключающихся приложения проверяют SSO для аутентификации пользователей и получения данных, связанных с пользователями.
Теперь эти 4 подключающихся приложения разработаны с использованием Meteor.
Основной задачей здесь было сделать вещи реактивными. / в режиме реального времени. Например, чат / обмен сообщениями, создание групп, отображение списка пользователей и слушателей для вновь зарегистрированных пользователей.
Таким образом, в этом сценарии база данных пользователей находилась на другом удаленном сервере (SSO), поэтому при подключении приложения я не мог просто:
Meteor.publish("getUsers")
Поэтому при подключении приложений я решил создать временную коллекцию под названием:
UserReactiveCollection
со следующей структурой:
UserReactiveCollection.{
_id: 1,
userId: '2',
createdAt: new Date()
}
И я опубликовал подписку:
Meteor.publish("subscribeNewUserSso", function () {
return UserReactiveCollection.find({});
});
Итак, для обновления UserReactiveCollection
я выставил Rest Api на каждом подключаемом приложении соответственно. Эти API получают данные от SSO и обновляются в UserReactiveCollection
.
Так что на стороне SSO, когда когда-либо регистрируется новый пользователь. Я пингую эти Apis (при подключении приложений) и отправляю вставленный userId в полезную нагрузку.
Итак, теперь эти подключающиеся приложения получают onDataChanged
ping из подписки и получают userId.
Используя этот userId подключающиеся приложения отправляют запрос обратно к единому входу и получают сведения о пользователе с указанным c userId и добавляются в список пользователей.
Вот как я все это заработал, поэтому пока я просто отмечаю свой ответ принятым, но как Я упомянул выше, что: «Возможно, это не идеальный способ справиться с этим, но, насколько мне известно, это сработало для меня так хорошо. Но да, я все еще открыт для предложений».
И отдельное спасибо @Jankapunkt за помощь.