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

C# 使用成员资格,而不仅仅是创建自己的类,c#,asp.net,membership,C#,Asp.net,Membership,我开始使用“会员制”框架(你可能已经从我过去的5篇文章中注意到) 在我的代码中,我继承了SqlMembershipProvider类并重写了函数,因为我的数据库不符合默认要求的模式 因此,我想问的问题是: 当我可以用我希望在应用程序中使用的函数创建自己的类时,为什么我要使用成员身份类 角色框架也是如此。简单回答:当涉及到安全性时,不要假设你知道自己在做什么。如果你试图自己做,那么你可能会做错 安全性很难 Microsoft已经花费了大量资源来实现成员资格和角色框架。只要它们符合你的需要,那为什么

我开始使用“会员制”框架(你可能已经从我过去的5篇文章中注意到)

在我的代码中,我继承了
SqlMembershipProvider
类并重写了函数,因为我的数据库不符合默认要求的模式

因此,我想问的问题是:

当我可以用我希望在应用程序中使用的函数创建自己的类时,为什么我要使用
成员身份


角色
框架也是如此。

简单回答:当涉及到安全性时,不要假设你知道自己在做什么。如果你试图自己做,那么你可能会做错

安全性很难


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

简短回答:当涉及到安全性时,不要假设你知道自己在做什么。如果你试图自己做,那么你可能会做错

安全性很难


Microsoft已经花费了大量资源来实现成员资格和角色框架。只要它们符合你的需要,那为什么要创造你自己的东西呢?此外,通过使用标准框架,您的解决方案将与同样使用相同框架的其他项目兼容。在您的情况下,这可能是一个问题,也可能不是。Asp.net为“成员资格”框架提供了许多挂钩

public class MyMembershipProvider : MembershipProvider
{ 
        public override bool ValidateUser(string username, string password)
        {    
            //check user credentials
            return IsUserValid;
        }
}
您可以根据需要定制它。 看

这允许您使用表进行身份验证,同时也是框架的一部分

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>

Asp.net为“成员资格”框架提供了许多挂钩

public class MyMembershipProvider : MembershipProvider
{ 
        public override bool ValidateUser(string username, string password)
        {    
            //check user credentials
            return IsUserValid;
        }
}
您可以根据需要定制它。 看

这允许您使用表进行身份验证,同时也是框架的一部分

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>

首先,如果您有自己的Prexisitng用户数据库,您可能不应该试图强迫
SqlMembershipProvider
使用它
SqlMembershipProvider
是抽象
MembershipProvider
类的完整实现,要正常运行,需要具有正确架构的数据库

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

首先,在看到VS插入的代码后,任务看起来确实令人望而生畏。但是请记住,您只需要实际实现应用程序需要的部分。保留默认值
抛出新的NotImplementedException()是OK用于不需要的方法和属性

现在,对于您的问题“我为什么要使用成员类…”,答案很简单。这是一个经过测试的、经过深思熟虑的抽象概念,在构建身份验证方案时,它将引导您朝着正确的方向前进


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

首先,如果您有自己的Prexisitng用户数据库,您可能不应该试图强制
SqlMembershipProvider
使用它
SqlMembershipProvider
是抽象
MembershipProvider
类的完整实现,要正常运行,需要具有正确架构的数据库

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

首先,在看到VS插入的代码后,任务看起来确实令人望而生畏。但是请记住,您只需要实际实现应用程序需要的部分。保留默认值
抛出新的NotImplementedException()是OK用于不需要的方法和属性

现在,对于您的问题“我为什么要使用成员类…”,答案很简单。这是一个经过测试的、经过深思熟虑的抽象概念,在构建身份验证方案时,它将引导您朝着正确的方向前进


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

您能否详细说明一下:“我的数据库不符合默认情况下所需的模式”?你知道,默认模型有什么问题吗?正如Rune所说,如果你不知道自己在做什么,那么它的某些部分很难正确。我们通常使用会员类作为基础,就像你一样,