【问题标题】:How to migrate from custom Membership Provider to SqlMembershipProvider?如何从自定义 Membership Provider 迁移到 SqlMembershipProvider?
【发布时间】:2009-08-17 18:27:24
【问题描述】:

我目前在 ASP.NET Web 应用程序中使用 MembershipProvider 的一个非常基本的自定义实现。随着我对成员资格要求的增加,使用现有的、功能齐全且经过良好测试的实现(如SqlMembershipProvider)似乎很有意义。我已经想出了如何使用 aspnet_Memebership 存储过程从我的自定义表中创建用户,但我被困在密码上。我的自定义实现不使用盐,而 SqlMembershipProvider 似乎需要它。

我希望这对我的用户来说是一个平稳的过渡,而不是要求每个人在更改后第一次登录时更新他们的密码。

如何将散列密码从自定义实现(见下文)迁移到 SqlMemberhipProvider?

FormsAuthentication.HashPasswordForStoringInConfigFile(password, FormsAuthPasswordFormat.SHA1.ToString())

更新:我应该澄清一下,我的自定义提供程序是 MembershipProvider 的实现,而不是功能齐全的提供程序。另外,我尝试过将 aspnet_Membership_CreateUser 与空盐一起使用,但哈希值不匹配。

【问题讨论】:

  • 就我个人而言,我发现标准会员提供者很麻烦,而且基本上完全无法使用.. YMMV :P
  • @Thorarin - 你不喜欢 SqlMembershipProvider 的什么?
  • 在尝试迁移用户几天后,我放弃了。我只是要将缺少的功能添加到我的自定义提供程序中。

标签: asp.net membership sqlmembershipprovider


【解决方案1】:

您可以编写一个自定义散列算法来删除盐(组合盐和密码的前 16 个字节)。

http://forums.asp.net/t/981295.aspx

或者,您也可以编写自己的继承 MembershipProvider 的类,但这会更麻烦。

【讨论】:

    【解决方案2】:

    最好的办法是尝试使用 盐手动(通过存储过程)创建SqlMembership 的用户。

    如果这不起作用,我认为您对 SqlMembershipProvider 不走运,但您始终可以编写自己的 MembershipProvider(甚至可能基于 SqlMembershipProvider 自己的后端) .没那么难。

    【讨论】:

    • @Ruben - 你和 Axl 都应该得到答案,但 Axl 需要更多的代表 :)
    【解决方案3】:

    覆盖 System.Web.Security.SqlMembershipProvider 类,并根据需要自定义覆盖尽可能多或尽可能少的方法。

    此处未看到 web.config。但事实上,你一开始就有自己的自定义工作,我不认为那部分是一个绊脚石。

    public class SqlMembershipProviderOverride : System.Web.Security.SqlMembershipProvider
    {
        public static readonly string FORCED_OVERRIDE_APPLICATION_NAME = "MyApplicationName";
    
        public SqlMembershipProviderOverride()
        {
            this.ApplicationName = FORCED_OVERRIDE_APPLICATION_NAME;
        }
    
        public override System.Web.Security.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status)
        {
            return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer,    isApproved, providerUserKey, out status);
            /*
                  Do "your own thing" in this or any other override method
            */
    
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多