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

我不想使用配置文件,所以我决定使用自定义MembershipProvider(或者您知道更好的,更轻松的方法吗?)。

我不了解的是MembershipUser和Membership。
如果我从MembershipProvider继承,则在覆盖的方法中,我控制着数据库的访问数据。

但是,如何使用MembershipProvider的继承类?
如果我想通过使用成员身份验证用户身份,则应该执行以下操作:

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

但是,类是从MembershipProvider继承的呢?以及何时使用从MembershipUser继承的类?成员(member)资格和MembershipProvider之间是什么关系?

最佳答案

虽然不是很清晰的on MSDN,但并不是那么复杂。有三个类:

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

  • 根据您应用程序的配置(configuration/system.web/membership)选择一个自定义MembershipProvider(通过Membership中的代码)。在这里,您可以带动您的提供商。必须编写MembershipProvider实现,以访问用户希望为用户选择的任何数据存储:本例中为User表。

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

    这就是说,我希望您确定您不想use Profiles,并且确实希望有一个单独的User表。如果您正在编写内部应用程序,则使用现有的启用了Active DirectoryLDAP的数据存储区将减少管理成本并可能降低安全风险。沿着MembershipProvider路线进行操作时,有数百种事情很容易出错。您使用salted hashes吗?您如何保护User表不受操纵? MSDN仅覆盖了您可能会遇到的security issues的一小部分。

    关于ASP.NET中的Membership,MembershipProvider和MembershipUser关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/628137/

    10-13 02:15