0

我正在尝试使用 ASP.NET MVC4 来管理表单身份验证和 OAuth (Facebook),并处理浏览器会话。

然而,我想在 NoSQL 数据存储中管理所有用户的数据(实际上是所有数据)。由于我已经为该商店提供了数据访问层库,我认为我根本不应该使用实体框架。

我的想法是: 1.禁用EntityFramework,所有用于实现“会员”的“默认”数据连接和表。2. 通过从 SimpleMembershipProvider 继承我自己的提供程序类,在 NoSQL 上实现我自己的提供程序(以支持表单和 OAuth 身份验证) 3. 将系统配置为暂时不使用角色提供程序(尚无管理角色的要求)

不幸的是,我无法执行“步骤 1”,即从所有默认连接和表中读取。

我确实设法注册并使用了我自己的 SimpleMembershipProvider 实现,但是周围有一些代码不断调用“默认连接”。

在 web.config 中禁用 RoleManager 时,我的提供商遇到的异常示例:

  InnerException: System.InvalidOperationException
       HResult=-2146233079
       Message=The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588
       Source=MvcApplication5
       StackTrace:
            at MvcApplication5.Filters.InitializeSimpleMembershipAttribute.SimpleMembershipInitializer..ctor() in c:\Users\max\Documents\Visual Studio 2012\Projects\MvcApplication2\MvcApplication5\Filters\InitializeSimpleMembershipAttribute.cs:line 45
       InnerException: System.Configuration.Provider.ProviderException
            HResult=-2146233088
            Message=The Role Manager feature has not been enabled.
            Source=System.Web
            StackTrace:
                 at System.Web.Security.Roles.EnsureEnabled()
                 at System.Web.Security.Roles.get_Provider()
                 at WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables)
                 at WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String connectionStringName, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables)
                 at MvcApplication5.Filters.InitializeSimpleMembershipAttribute.SimpleMembershipInitializer..ctor() in c:\Users\max\Documents\Visual Studio 2012\Projects\MvcApplication2\MvcApplication5\Filters\InitializeSimpleMembershipAttribute.cs:line 41
            InnerException: 

推荐的方法是什么?(在 web.config 中?)如果我的计划中存在根本缺陷或误解,请告诉我。

感谢您的任何提示。

4

2 回答 2

1

SimpleMembershipProvider不使用实体框架。相反,它有自己的 SQL 操作。

可以看一下SimpleMembershipProvider.cs的源码

如果要实现自定义提供程序(以同时支持 Forms 和 OAuth 身份验证),则需要通过处理SimpleMembershipProvider中的一些代码来覆盖ExtendedMembershipProvider

在此处输入图像描述

从 - SimpleMembership、Membership Providers、Universal Providers 和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板复制图像

于 2013-09-13T20:34:41.997 回答
0

根据这个帖子

请注意,SimpleMembership 仍然需要一些 SQL Server 风格 - 它不适用于 MySQL、NoSQL 数据库等。如果您想查看 WebMatrix.WebData.dll 中的代码,可以使用 ILSpy 等工具查看为什么 - 在某些地方执行 SQL Server 特定的 SQL 语句,尤其是在创建和初始化表时。如果您单独创建表,您似乎可以使用另一个数据库,但我还没有尝试过,目前不支持它。

但是,您可能会看到这篇关于使用 ravendb 进行身份验证和授权的帖子

于 2013-09-13T11:09:00.563 回答