AspNet Membership - 集中化登录

4

目前我们有几个数据库,每个数据库都有自己的aspnet成员资格表。我们想将所有成员资格集中到一个数据库中。例如,一个主要的登录页面,在那里他们将指定数据库、用户名和密码。然后我们会检查集中式数据库并验证他们的身份,并根据他们在文本框中输入的数据库名称将他们重定向到他们的帐户。

最佳方法是什么?可能有多个用户名在不同的数据库中相同,这是我的挑战。


你能发布一下会员表的表结构和一些包含重复数据的样本数据吗? - Melanie
如果用户名和密码在多个数据库中保持一致,那么当您将数据导入到集中的单个数据库时,这不应该是一个问题。您需要创建一个脚本或存储过程,根据选择不在目标数据库中存在的唯一记录执行批量插入,如果我正确理解您的问题,则“链接服务器”可能是可行的路线。 - MethodMan
我们使用 aspnet_Membership、aspnet_Users 和 aspnet_Roles。因此,在数据库A中可能有一个名叫Jhon,在数据库B中也可能有一个名叫John的用户,但它们位于不同的 aspnet_Users 表中,代表不同的人。 - jedgard
4个回答

2
ASP.Net Membership有一个Applications表。只要您为不同的网站使用不同的应用程序名称,就可以将它们合并成一个大型数据库;重复用户ID(存储为uniqueid)的可能性非常低。
当用户登录时,您需要以下3个字段 -
  1. 应用程序(可以是DropDownList)
  2. 用户名
  3. 密码

创建自己的验证

您不能使用自定义Membership提供程序来验证仅接受用户名和密码的用户。
// ValidateUser method doesn't take any additional parameter
public bool ValidateUser(string username, string password)

因此,您需要实现自己的验证方法来验证合并数据库中的用户。

注意事项

如果您正在重定向到不同的网站,请注意表单身份验证的限制。例如,它无法将身份验证cookie从www.one.com传输到www.two.com。


0

你能假设在database1中的"user123"和database2中的"user123"是同一个人吗?

如果可以,你可以像DJ KRAZE建议的那样进行合并。 如果不行,你就必须为重复的用户名创建新用户。您可以编写相当简单的SQL脚本来完成此操作,只需将数字附加到ID末尾即可。

例如.... 在数据库1中找到了"john",则创建"john1"用户。据我记得,aspnet_membership数据库附带了一组非常强大的存储过程,用于创建用户等,并创建所有正确的表条目。如果您最终选择了这条路,请务必使用它们,而不是尝试自由插入/更新语句。


是的,它们是不同的人,数据库1中的约翰不是数据库2中的那个约翰。 - jedgard

0

我相信你可以在登录控件中选择要连接的数据库。所以创建一个下拉菜单,让用户可以选择要连接的数据库,然后将该选择作为你的数据库。参考http://forums.asp.net/t/1403132.aspx/1上的第4点。 这个选择可以是指定数据库的连接字符串名称。


0
根据我的经验,你最好的做法是根据源数据库在重复的用户名前加上前缀,并将合并工作委托给最终用户。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接