Asp.net mvc 3 提供的用户名或密码不正确。mvc3中的Internet应用

Asp.net mvc 3 提供的用户名或密码不正确。mvc3中的Internet应用,asp.net-mvc-3,membership,membership-provider,custom-membershipprovider,machinekey,Asp.net Mvc 3,Membership,Membership Provider,Custom Membershipprovider,Machinekey,我有一个“Internet应用程序”“-”一个默认的ASP.NET MVC 3项目,该项目带有使用表单身份验证的帐户控制器。“名为MyMv3App。我使用Ctrl+F5在IIS Express中运行站点,然后转到localhost:10382/Account/Register并创建一个用户“test1”。一旦用户被创建,我就被重定向到主页。我注销。然后我转到localhost:10382/Account/LogOn并键入用户“test1”的用户名和密码,然后单击“登录”按钮,用户就登录了。酷,到

我有一个“Internet应用程序”“-”一个默认的ASP.NET MVC 3项目,该项目带有使用表单身份验证的帐户控制器。“名为MyMv3App。我使用Ctrl+F5在IIS Express中运行站点,然后转到localhost:10382/Account/Register并创建一个用户“test1”。一旦用户被创建,我就被重定向到主页。我注销。然后我转到localhost:10382/Account/LogOn并键入用户“test1”的用户名和密码,然后单击“登录”按钮,用户就登录了。酷,到目前为止一切正常

接下来,我添加了一个新的C类库”项目,并将其命名为MyCustomMembershipProvider。然后,我从这里下载ProviderToolkitSamples.msi,运行msi安装程序,然后转到文件夹C:\Program Files(x86)\ASP.NET Provider Toolkit SQL Samples,在那里安装所有文件。然后,我将这些文件添加到我刚刚创建的C#类库项目MyCustomMembershipProvider中,SQLMembershipProvider.csSecUtil.csSqlConnectionHelper.csSR.cs。(我需要所有这些文件,否则C#类库项目MyCustomMembershipProvider将无法编译)。然后,我向C#类库项目MyCustomMembershipProvider添加了对System.configurationSystem.WebSystem.Web.ApplicationServices的引用。然后我构建项目,然后转到MyMvc3App 我添加了对MyCustomMembershipProvider项目的引用

注意:忘了提到我更改了项目中所有四个文件的名称空间 MyCustomMembershipProvider改为“命名空间MyCustomMembershipProvider”,并且我还将类名重命名为MyCustomMembershipProvider。在SQLMembershipProvider.cs第110行中,我将其从name=“SQLMembershipProvider”改为;至name=“MyCustomMembershipProvider”

接下来,我将从以下位置更改web.config文件成员资格部分:


并生成一个ASP.NET 2.0 machineKey并复制粘贴到web.config的system.web元素中:


我再一次做了和以前完全一样的事情;我转到localhost:10382/Account/Register,创建了一个用户,这次我调用用户“test3”。一旦用户被创建,我就被重定向到主页。我注销。然后我转到localhost:10382/Account/LogOn并键入用户“test3”的用户名和密码,然后单击“登录”按钮并点击BAM!用户再次登录

为什么我必须在web.config中使用生成的validationKey和decryptionKey手动配置machineKey,MyCustomMembershipProvider才能使用登录页面?据我所知,没有一篇文章/页面/博客谈到向web.config中添加machineKey元素以使自定义成员资格提供商能够工作

更新1:添加hashAlgorithmType=“SHA1”也可以:


有趣的是MSDN说SHA1是默认值

hashAlgorithmType 可选的字符串属性。 指定用于散列密码值的加密算法的名称。 此属性的值对应于cryptoNameMapping配置部分中nameEntry元素的name属性。有关指定自定义哈希算法的信息,请参见将算法名称映射到加密类。 默认值为SHA1

更新2
在阅读了微软的最新技术之后,我决定与大家分享我发现的关于他们最新Mebership提供商的一些发现;简单记忆。我正处于个人项目的阶段,我决定在构建ASP.NET 2.0的第二天将CustomMembership provider从中删除,并改用SimpleMembership provider。为什么?好吧,在乔恩·加洛韦(Jon Galloway)的以下博文中,你有你想知道的所有信息。我还添加了一些链接到值得查看的资源。根据微软的说法,SimpleMembership是ASP.NET 2.0成员资格的继承者


我意识到我第一篇文章中的问题长得离谱,所以这里是我问题的简短版本-我希望有人能给我指出正确的方向。。为什么我需要使用我下载的Microsofts SqlMembershipProvider在web.config中使用machineKey元素,以便在同一用户首次通过RegisterPerform注册并立即注销后立即成功登录该用户?在阅读了Microsoft最新技术后,我决定分享一些我发现的关于他们最新Mebership供应商的调查结果;简单记忆。我正处于我个人项目的阶段,我决定放弃我构建的CustomMembershipProvider,转而使用SimpleMembership provider。为什么?你在这篇博文中有你想知道的所有信息。我还添加了一些链接到值得查看的资源。