【问题标题】:ASP.net MVC 4 Users and Roles administration ("Membership.Provider" property must be an instance of "ExtendedMembershipProvider".)ASP.net MVC 4 用户和角色管理(“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。)
【发布时间】:2013-03-27 16:22:32
【问题描述】:

我已经尝试了 2 天来让某些东西正常工作,但到目前为止它毫无意义。我需要的是管理用户及其角色,仅此而已。

我尝试了解如何在 MVC 中执行此操作,但我似乎无法在 Internet 或任何 MVC 4 书籍中找到有关如何执行此操作的详细教程。

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

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

  • 默认会员提供商(我对此一无所知)
  • 通用提供商
  • 简单会员

我找到了这个教程:

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

在这里,他们要求使用 Internet 应用程序模板创建一个新的 MVC 4 应用程序项目,并复制与帐户控制相关的所有文件。

我是为我的项目这样做的,但一旦我尝试登录,我就会得到:

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

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

是因为我如何在我的 web.config 文件中定义配置文件、成员资格和角色管理器提供程序,其定义如下:

<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

哪个选项更适合我?如果你知道一个很好的教程,可以给我链接吗?

任何帮助将不胜感激!提前致谢!

【问题讨论】:

  • 你看过 ASP.NET Simple Membership 吗?这是一个很好的起点:weblogs.asp.net/jgalloway/archive/2012/08/29/…
  • 我刚刚注意到我的控制器类有一个 [InitializeSimpleMembership] 明确说明我正在使用 simplemembership 在您发送给我的链接上,它们显示了 web.config 文件如何定义提供程序,我只是将这些添加到我的 web.config 并且一旦我登录我仍然得到相同的调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的一个实例。我做错了什么?
  • 您是否尝试过从简单会员开始“干净”?该线程可能会有所帮助:stackoverflow.com/questions/13324544/…
  • 当用户/会员需求很简单时,我通常会自己实现一些东西。
  • 嗯,这是我的第一个专业网络应用程序,我真的很关心安全性,但对它没有深入的了解,自己实现它不是有风险吗?不使用像微软这样的公司提出的选项似乎是一个很大的权衡。只是我的看法,你怎么看?

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


【解决方案1】:

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

1) 请查看 Scott Hanselman 的链接。

2) 如果不使用profile,则不需要它。 roleManager 配置不正确。

仅供参考:请在 web.config 中明确定义 machineKey;以后可以省去很多麻烦。

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

【讨论】:

  • 您能在机器钥匙上指定吗?它是干什么用的?感谢您的回复!
  • 如果密码被加密或散列,会员提供者使用machineKey来生成它。如果您将应用程序移动到不同的服务器,如果 machineKey 未明确定义,现有用户将无法再登录。
【解决方案2】:

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

答案:SimpleMembershipProvider

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 非常感谢,会研究一下,但是我看到新的 mvc 5 他们已经改变了会员组件,并且看起来更容易使用,你看到了吗?
    • 是的,我有。比 OWIN 提供者有 WebMatrix 提供者。如果您从 MVC4 迁移到 MVC5,您将花费一个小时或更长时间来处理这些事情及其依赖关系,因为对于简单的事情来说仍然太复杂了。这就是我创建这个的原因。它只是提供登录功能用户和非常简单的角色,不依赖于宇宙飞船。
    • @Dmitry 一切都与您的示例项目一起保存在 1 个表中。对于小型应用来说,这是一个很好的模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2015-09-05
    • 2011-10-24
    • 2013-08-01
    相关资源
    最近更新 更多