C# 是否值得转移到SimpleMembership

C# 是否值得转移到SimpleMembership,c#,asp.net-mvc,asp.net-mvc-4,asp.net-membership,simplemembership,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Membership,Simplemembership,我有一个尚未发布的项目,我不会很快发布,但几天前我将它从mvc3移动到了mvc4,在阅读时我看到了这个新的安全提供商SimpleMembership 我现在实现安全性的方法是使用MembershipProvider和FormsAuthentication: 我已经实施了ICustomPrincipal 我已经实现了CustomPrincipalSerializeModel 我执行了我的原则 要注册我使用的用户,请执行以下操作: MembershipCreateStatus status;

我有一个尚未发布的项目,我不会很快发布,但几天前我将它从mvc3移动到了mvc4,在阅读时我看到了这个新的安全提供商
SimpleMembership

我现在实现安全性的方法是使用
MembershipProvider
FormsAuthentication

  • 我已经实施了ICustomPrincipal
  • 我已经实现了CustomPrincipalSerializeModel
  • 我执行了我的原则
要注册我使用的用户,请执行以下操作:

 MembershipCreateStatus status;
            Guid g = Guid.NewGuid();
            Membership.CreateUser(model.User.Email.Trim(), model.Password.Trim(), model.User.Email.Trim(), null, null, true, g, out status);

            if (status == MembershipCreateStatus.Success)
...
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                             1,
                             tUser.Email,
                             DateTime.Now,
                             DateTime.Now.AddDays(60),
                             true,
                             userData);

                    string encTicket = FormsAuthentication.Encrypt(authTicket);
                    HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
                    Response.Cookies.Add(faCookie);
...
但正如我看到的,SimpleMembership看起来更干净,我想将项目转移到它上
但是我有一些问题:

1)我对所有数据库操作都使用存储过程,但我根本不使用EF。如果我使用SimpleMembership,是否可以在没有EF的情况下使用它?
2)我是否需要为实际应用程序构建自定义SimpleMembership?
3)我看到它创建了表。我有我的表
用户、配置文件、角色和用户角色
我可以将其应用于我的自定义模式吗?


4)如果我想调用
WebSecurity.CreateAccount(…)
我想从域项目中调用一些我的自定义方法,该方法负责调用创建用户的存储过程。我必须对其进行自定义吗?如果必须这样做,是否有一些资源可以解释如何对用户和角色进行自定义?

了解SimpleMembership以及它是如何演变而来的,并且取决于,在以前的成员资格实施中,我建议阅读原始参考“”和我对“”的更详细回答,以便更好地理解它。总结这些参考资料:

  • 简单记忆
    • 是一个涵盖
      SimpleMembershipProvider
      SimpleRoleProvider
    • 是用于表单身份验证的存储和功能提供程序
    • 在ASP.NET窗体和ASP.NET MVC网站中工作,也可以在ASP.NET Web API和Signal中使用,以提供统一的身份验证和授权模型
  • SimpleMembershipProvider
    • 通过
      ExtendedMembershipProvider
      抽象基类向原始MembershipProvider添加新功能,例如与OAuth提供程序的现成集成
    • 创建4个默认表,您不/不应该与之交互(
      webpages\u Membership
      webpages\u OAuthMembership
      webpages\u UsersInRoles
      ),以及一个(
      UserProfile
      ),您可以按照自己的意愿构建
    • 使用
      WebSecurity
      helper类添加新功能
    • 从原始成员身份中存储在单个xml字段中的“用户配置文件”移动到新
      UserProfile
      表中每列更易于管理的属性(可使用EF完全自定义)
要回答您的具体问题:

1) 我对所有数据库操作都使用存储过程,但我根本不使用EF。如果我使用SimpleMembership,是否可以在没有EF的情况下使用它

通常情况下,您不会直接与前缀为
webpages\uuu
的表交互,因为
Membership
WebSecurity
等中有API级别的函数来执行您需要的所有业务功能。但是,没有什么可以阻止您通过存储过程与
UserProfile
进行交互,如果您不想利用这些API,您甚至可以通过存储过程与
网页
表进行交互(但如果您这样做了,您将复制SimpleMembership的所有好处)

2) 我是否需要为实际应用程序构建自定义SimpleMembership

这在很大程度上取决于您想要做什么,但到目前为止,我还没有为任何真实世界的应用程序这样做。我已经构建并添加了现有的API,但没有替换它们

3) 我看到它可以创建表。我有我的表用户、配置文件、角色和用户角色我可以将其应用于我的自定义模式吗

如果要迁移到SimpleMembership,则必须将其中的数据移植到表
webpages\u Membership
webpages\u OAuthMembership
webpages\u Roles
webpages\u UsersInRoles
UserProfile
。但是,请注意,
UserProfile
可以调用任何您想要的名称,您不必调用它
UserProfile

4) 如果我想调用WebSecurity.CreateAccount(…),并且我想从负责调用创建用户的存储过程的域项目中调用一些自定义方法,那么我必须对其进行自定义吗?如果必须这样做,是否有一些资源解释如何对用户和角色进行自定义

理解您的需求有点困难,但是
WebSecurity.CreateAccount
执行以下操作:

  • 网页\u会员资格中创建记录
  • 如果使用
    WebSecurity.CreateUserAndAccount,则可以选择将属性添加到
    UserProfile
如果要在数据库中执行其他操作,则需要在调用
WebSecurity.CreateAccount
后调用该操作。您可以使用
TransactionScope

但是,如果您想将这一切封装在对
WebSecurity.CreateAccount
的一次调用中,并使其调用您自己的域方法和存储过程,则必须通过继承
SimpleMembershipProvider
(或从
ExtendedMembershipProvider
)来创建您自己的提供程序。当
WebSecurity.CreateAccount
调用
ExtendedMembershipProvider.CreateAccount
时,它将遵从您的自定义逻辑


摘要

我会迁移吗?SimpleMembership的好处是