用例:我在app.foo.com
上构建的应用,以及community.foo.com
上的望远镜实例,位于不同的应用服务器上。他们共享的唯一收藏是users
。我会给两个应用程序提供相同的mongo url和oplog url,并确保除users
以外的集合名称在两个应用程序之间没有重叠。
这应该可行吗?任何表现问题?
答案 0 :(得分:6)
问题在于您必须共享集合名称。
如果你使用你的数据库,你也会突然使用其他应用程序在未来版本中使用的集合名称来保护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应用程序的用户集合。
答案 1 :(得分:4)
这根本没问题。例如,一个常见的用例是拥有一个面向用户的应用程序和一个管理员应用程序,两者都使用相同的数据库。
答案 2 :(得分:1)
这不应该在数据库级别完成:
当两个应用程序中的任何一个发展时,它们可能会破坏自己或另一个应用程序。
这是属于API层或单独服务的功能。
通过这种方式,您可以使用一个用户身份服务来处理身份验证(甚至是跨域)和基本用户数据,并将每个特定于应用程序的用户信息保留在您自己的生态系统中。没有崩溃的风险。
我可以推荐一些:
其中大多数都有用于处理身份验证的客户端库,只是将当前登录用户的ID传回给您的应用。
有些还提供了一个应用程序作为主服务器,并对用户进行身份验证,然后告诉服务对象谁登录,这样您就可以从其他应用程序中检索数据(在船体上我们称之为自带用户)