ASP.net MVC 4用户和角色管理(“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。)

时间:2013-03-27 16:22:32

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我已经尝试了2天才能得到一些有用的东西,但到目前为止这一点毫无意义。我需要的是管理用户及其角色,没有别的。

我尝试过的是了解如何在MVC中进行操作,但我似乎无法在互联网或任何MVC 4书中找到有关如何操作的详细教程。

我首先使用aspnet_regsql实用程序启用aspnet数据库,这将创建这些表:

Tables added by aspnet_regsql

这就是我在教程中找到的所有内容,它没有显示如何与这些表进行交互 (我假设是默认会员提供者),到目前为止,我发现有3个主要选项:

  • 默认会员提供者(我从不知道)
  • Universal Providers
  • SimpleMembership

我找到了这个教程:

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-7

他们要求创建一个带有互联网应用模板的新MVC 4应用项目,并复制与账户控制相关的所有文件。

我为我的项目做了这个,但是当我尝试登录时,我得到:

要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。

根据这个论坛: http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/d352bb1b-577c-42b7-8872-5ed59cd65f32/

是因为我在web.config文件中定义了profile,membership和roleManager提供程序,其定义如下:

<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="DatabaseConnection" applicationName="/" />
  </providers>
</profile>
<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DatabaseConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<roleManager enabled="true">
  <providers>
    <clear />
    <add connectionStringName="DatabaseConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>
</roleManager>

我只需要能够添加新用户,为他们分配角色,并根据访问视图的角色显示不同的内容。

问题#1 使用Internet应用程序模板创建MVC 4应用程序时使用的成员资格提供程序是什么?

问题#2

我在使用web.config文件时遇到了什么问题?如何正确定义提供者?

问题#3

哪个选项更适合我?如果您知道一个很好的教程,请将它链接到我吗?

非常感谢任何帮助!提前谢谢!

3 个答案:

答案 0 :(得分:4)

您使用的会员提供商已过时。新Universal Membership Provider使用不带前缀aspnet_的新表名。

1)请看看Scott Hanselman的链接。

2)如果你不使用它,你不需要profileroleManager配置不正确。

仅供参考:请在web.config中明确定义machineKey;它将在未来为您节省很多麻烦。

P.S。我同意你的看法。我刚读完Pro ASP.NET MVC 4 by Adam Freeman;他没有提到会员提供者。如果您想阅读,ASP.NET MVC 4 and the Web API by Jamie Kurtz会使用旧的成员资格提供程序。

答案 1 :(得分:1)

问题#1使用互联网应用程序模板创建MVC 4应用程序时使用的成员资格提供程序是什么?

答案:SimpleMembershipProvider

问题#2我对web.config文件做错了什么?如何正确定义提供者?

答案:对于SimpleMembershipProvider,不需要修改web.config文件。有关详细的配置/设置信息和教程,请参阅此处:http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html

答案 2 :(得分:1)

ASP.Net中的成员资格和安全性极其复杂,并且在ASP.NET MVC中仍然过于复杂。但幸运的是,根本不可能使用内置成员资格。我已经创建了简单的解决方案,并在很多项目中使用,现在将其添加到github,请参阅http://github.com/TesserisPro/ASP.NET-SImple-Security-Provider您可以轻松自定义它。