ASP.NET中的Membership、MembershipProvider和MembershipUser的关系是什么?

8
我将用户数据存储在名为“Users”的MSSQL表中。我想要的是,对于实际登录的用户,可以访问所有用户的数据(电子邮件、地址、电话、用户是否订阅等)。
我不想使用配置文件,所以我决定使用自定义MembershipProvider(或者您知道更好、更少痛苦的方法吗?)。
我不理解MembershipUser和Membership。 如果我从MembershipProvider继承,我可以在覆盖的方法中控制从数据库中获取和访问数据。
但是,我该如何使用从MembershipProvider继承的类呢? 如果我要使用membership验证用户,应该怎么做:
if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

但是MembershipProvider类从哪里继承而来呢?什么时候使用从MembershipUser继承的类?Membership和MembershipProvider之间有什么关系?

2个回答

8

虽然on MSDN上讲得不是很清楚,但实际并不复杂。有三个类:

  • Membership:提供实用方法和入口点,基本上是一个单例(静态类)。
  • MembershipProvider:作为MembershipUser对象的数据访问器和工厂。
  • MembershipUser:代表一个单独的用户。

根据你的应用程序配置:configuration/system.web/membership,在Membership中选择自定义MembershipProvider。这里是你使用提供程序的地方。你的MembershipProvider实现必须被编写成访问你所喜欢的用户数据存储:在这种情况下是你的用户表。

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

在此,我希望你确定不想使用配置文件,而是真的想要一个单独的用户表。如果您正在编写内部应用程序,则使用现有的Active Directory或启用LDAP的数据存储将减少管理成本并可能降低安全风险。当使用MembershipProvider时,有数百种易错的事情可以轻松出现。您是否使用盐哈希?如何保护用户表免受操纵?MSDN仅涵盖了您可能面临的安全问题的一小部分。


谢谢,这帮了我很多。现在我明白了。比看起来容易多了。非常感谢。 - o..o

1

具体使用的提供程序由web.config控制。您实际上可以设置多个提供程序,并设置默认提供程序。请参阅:http://msdn.microsoft.com/en-us/library/6e9y4s5t.aspx

当以这种方式调用时,成员资格只使用默认提供程序。如果要为用户提供额外信息,则应继承MembershipUser,但这将使您的其余代码与特定提供程序绑定。


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