8

我将用户数据存储在名为 Users 的 MSSQL 表中。我想要的是访问实际登录用户的所有用户数据(电子邮件、地址、电话,如果用户是订户等)。

我不想使用配置文件,所以我决定使用自定义 MembershipProvider(或者你知道一些更好、更不痛苦的方法吗?)。

我不明白的是 MembershipUser 和 Membership。如果我从 MembershipProvider 继承,在重写的方法中,我控制对数据库的访问数据。

但是如何使用从 MembershipProvider 继承的类?如果我想使用成员身份验证用户,我应该这样做:

if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

但是从 MembershipProvider 继承的类在哪里呢?以及何时使用从 MembershipUser 继承的类?Membership 和 MembershipProvider 之间是什么关系?

4

2 回答 2

8

虽然在 MSDN上不是很清楚,但并不是那么复杂。有三个类:

  • 成员资格:提供实用方法和入口点——基本上是单例(静态类)。
  • MembershipProvider:充当 MembershipUser 对象的数据访问器和工厂。
  • MembershipUser:代表个人用户。

根据应用程序的配置选择自定义 MembershipProvider(通过 Membership 中的代码):configuration/system.web/membership。在这里,您可以让您的提供商发挥作用。必须编写 MembershipProvider 实现以访问您喜欢的用户数据存储:在这种情况下是您的 User 表。

MembershipUser 对象只能通过您的 MembershipProvider 创建。MembershipProvider.ValidateUser() 方法应该检查您的数据存储,用户/密码组合是否有效。MembershipProvider.GetUser() 检索用户信息——在访问受保护的页面中使用它,并将 System.Web.HttpContext.Current.User.Identity.Name 作为当前经过身份验证的用户传入。

这就是说,我希望你确定你不想使用 Profiles,并且真的想要一个单独的 User 表。如果您正在编写内部应用程序,使用现有的Active Directory或启用LDAP的数据存储将降低管理成本并可能降低安全风险。走 MembershipProvider 路线时,您很容易做数百件事。你使用盐渍哈希吗?您如何保护 User 表免受操纵?MSDN 仅涵盖您可能面临 的一小部分安全问题。

于 2009-03-10T01:38:05.037 回答
1

使用的特定提供程序在 web.config 上进行控制。您实际上可以设置超过 1 个提供者,并有一个默认的提供者。检查:http: //msdn.microsoft.com/en-us/library/6e9y4s5t.aspx

当这样调用时,成员资格只使用默认提供程序。如果您想为用户提供额外信息,您将继承 MembershipUser,但这会将其余代码与您的特定提供者联系起来。

于 2009-03-09T21:55:39.427 回答