现在我们有几个数据库,每个单独的数据库都有自己的 aspnet 成员表。我们希望将所有成员集中到一个数据库中。例如,他们将在其中指定数据库、用户名和密码的主登录页面。然后我们将检查集中式数据库并根据他们在文本框中输入的数据库名称进行身份验证并将其重定向到他们的帐户。
最好的方法是什么?,在不同的数据库中可能有多个相同的用户名,这是我的挑战。
现在我们有几个数据库,每个单独的数据库都有自己的 aspnet 成员表。我们希望将所有成员集中到一个数据库中。例如,他们将在其中指定数据库、用户名和密码的主登录页面。然后我们将检查集中式数据库并根据他们在文本框中输入的数据库名称进行身份验证并将其重定向到他们的帐户。
最好的方法是什么?,在不同的数据库中可能有多个相同的用户名,这是我的挑战。
ASP.Net Membership 有Applications 表。只要不同网站有不同的应用名称,就可以合并成一个大数据库;复制用户 ID(存储为唯一 ID)的机会非常低。
当用户登录时,您需要以下 3 个字段 -
您不能使用自定义 Membership Provider 来验证只接受用户名和密码的用户。
// ValidateUser method doesn't take any additional parameter
public bool ValidateUser(string username, string password)
所以你需要实现自己的验证方法来验证来自合并数据库的用户。
如果您要重定向到不同的网站,请注意表单身份验证的限制。例如,它不能将身份验证 cookie 从 www.one.com 传输到 www.two.com
你能假设database1中的“user123”和database2中的“user123”是同一个人吗?
如果是这样,您可以按照 DJ KRAZE 的建议进行合并。如果没有,您必须为重复的用户名创建新用户。您可以编写一个相当简单的 SQL 脚本来执行此操作,方法是在 ID 末尾附加一个数字。
像....在数据库 1 中找到“john”,创建“john1”用户。我记得,aspnet_membership 数据库带有一组非常强大的存储过程,用于创建用户等,以创建所有正确的表条目。如果你最终走这条路,我肯定会使用这些,而不是尝试自由插入/更新语句
我相信您可以在登录控件上选择要连接的数据库。所以创建一个下拉列表,用户可以在其中选择要连接的数据库,然后将该选择用作您的数据库。看看http://forums.asp.net/t/1403132.aspx/1上 的数字 4,选择可以是指定数据库的连接字符串名称。
根据我的经验,您可以做的最好的事情是在重复项上根据源数据库为用户名添加前缀,并将合并委托给最终用户。