用例:我构建的应用程序app.foo.com
,以及一个望远镜实例community.foo.com
,在不同的应用程序服务器上。他们唯一要分享的集合是users
. 我会为这两个应用程序提供相同的 mongo url 和 oplog url,并确保users
两个应用程序之间的集合名称不重叠。
这应该可以正常工作吗?任何性能问题?
用例:我构建的应用程序app.foo.com
,以及一个望远镜实例community.foo.com
,在不同的应用程序服务器上。他们唯一要分享的集合是users
. 我会为这两个应用程序提供相同的 mongo url 和 oplog url,并确保users
两个应用程序之间的集合名称不重叠。
这应该可以正常工作吗?任何性能问题?
这样做的问题是您必须共享集合名称。
如果你使用你的数据库,你也会突然使用你的其他应用程序在未来版本中使用的集合名称来防止 Telescope。
您可以做的就是仅在需要时共享该users
集合。
服务器端代码(客户端不需要)
Accounts.connection = DDP.connect("https://<telescope app url>");
Meteor.users = new Mongo.Collection("users", {
_preventAutopublish: true,
connection: Accounts.connection
});
或者更直接(如果您允许 OAuth 登录,则不推荐)
var database = new MongoInternals.RemoteCollectionDriver("<mongo url of telescope app>");
Meteor.users = new Mongo.Collection("users", { _driver: database });
所以这个应用程序现在使用 Telescope 应用程序的用户集合。
这完全没有问题。例如,有一个面向用户的应用程序和一个管理应用程序是一个常见的用例,它们都使用相同的数据库。
这不应该在数据库级别完成:
当这两个应用程序中的任何一个发展时,它们可能会破坏自己或另一个。
这是属于 API 层或单独服务的特性。
这样,您就有了一个用户身份服务来处理身份验证(甚至是跨域)和基本用户数据,并将每个应用程序特定的用户信息留在您的生态系统中它自己的一部分。没有崩溃的风险。
我可以推荐几个:
其中大多数都有客户端库,您可以使用这些库来处理身份验证并将当前登录的用户 ID 传回您的应用程序。
有些还提供让一个应用程序作为主应用程序,并验证用户身份,然后告诉服务谁已登录,这样您就可以从另一个应用程序检索数据(在船体,我们称之为自带用户)