使用成员资格而不仅仅是创建自己的类

时间:2012-08-24 12:42:23

标签: c# asp.net membership

我开始使用'会员'框架(正如您在过去的5篇文章中所注意到的那样)。

在我的代码中,我继承了SqlMembershipProvider类并覆盖了这些函数,因为我的数据库不符合默认情况下所需的模式。

所以我想问的问题是:

为什么我应该使用Membership类,当我可以使用我希望在我的应用程序中使用的函数创建自己的类时?

Roles框架也是如此。

3 个答案:

答案 0 :(得分:3)

简短回答:说到安全性,不要以为你知道自己在做什么。如果你试图自己做,那么你可能会做错了!

安全性很难!

Microsoft已经花费了大量资源来实现Membership和Roles框架。只要它们符合您的需求,那么为什么要创建自己的东西呢?此外,通过使用标准框架,您的解决方案将与使用相同框架的其他项目兼容。在您的情况下,这可能是也可能不是问题。

答案 1 :(得分:1)

首先,如果你有自己的preexisitng用户数据库,你可能不会试图强迫SqlMembershipProvider使用它。 SqlMembershipProvider是抽象MembershipProvider类的完整实现,为了正常运行,它需要一个具有正确模式的数据库。

相反,您应该创建自己的抽象MemberShipProvider类实现。要开始使用,请创建一个类CoultonsMemebshipProvider并将其派生自System.Web.Security.MembershipProvider。然后将光标放在 MembershipProvider 中并单击Ctrl+.,然后选择实现抽象类... 。然后,Visual Studio将为您可以实现的方法添加许多代码。

在看到VS插入代码后,该任务看起来确实令人生畏。但请记住,您只需实际实现应用程序所需的部件。对于您不需要的方法和属性,保留默认throw new NotImplementedException(); 确定

现在为您提问“ 我为什么要使用会员级别...... ”,答案很简单。这是一个久经考验,经过深思熟虑的抽象,可以在构建身份验证方案时指导您正确的方向。

也就是说,如果您强烈认为自己实际上并不需要会员资格提供者,那么您仍然可以使用FormsAuthentication并获得它提供的好处。如果您想探索此选项,请查看Scott Mitchell的FormsAuthentication上的tutorial(特别是简介部分)。

答案 2 :(得分:0)

Asp.net为“会员”框架提供了许多钩子。

您可以根据需要自定义它。 请看implementing a CustomMembership provider

这允许您对表进行身份验证,然后成为框架的一部分。

public class MyMembershipProvider : MembershipProvider
{ 
        public override bool ValidateUser(string username, string password)
        {    
            //check user credentials
            return IsUserValid;
        }
}

在web.config中:

  <membership defaultProvider="MyMembershipProvider">
      <providers>
        <clear />
        <add name="MyMembershipProvider"
             applicationName="MyApp"
             Description="My Membership Provider"
             passwordFormat="Clear"
             connectionStringName="MyMembershipConnection"
             type="MyApp.MyMembershipProvider" />
      </providers>
    </membership>