【问题标题】:Using Simple Membership Provider with mysql将简单的成员资格提供程序与 mysql 一起使用
【发布时间】:2012-09-19 05:05:10
【问题描述】:

是否可以将 Simple Membership Provider 与 mysql 一起使用(也使用实体框架)

如果是,如何实现。

非常感谢任何文档/链接

提前致谢

【问题讨论】:

    标签: mysql asp.net-mvc-4


    【解决方案1】:

    查看 Fabio Costa 的这篇简短文章,了解如何将 SimpleMembership 和 OAuth 与 mySQL 和 bigint 或任何您想要的数据库和数据类型一起使用:http://fabiocosta.ca/2012/11/24/use-simplemembership-and-oauth-with-any-database-and-datatype/。它应该可以解决您的问题。祝你好运。

    我还对我的代码进行了以下更改:

    • 添加了对 MySql.Data、MySql.Data.Entity 和 MySql.Web 的引用。在每个引用上将属性“复制本地”修改为 true。

    • 更改了连接字符串并在 web.config 中添加了 DbProviderFactory 以启用 MySql 连接。

    • 在 web.config 中添加了 roleManager 和 memberShip 配置。

    web.config

    <connectionStrings>    
        <add name="DefaultConnection" connectionString="Data Source=localhost;Database=dbname;User ID=username;Password=password;" providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
    <system.data>
        <DbProviderFactories>
            <clear />
            <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
    </system.data>
    <system.web>
        <roleManager enabled="true" defaultProvider="simple">
            <providers>
                <clear/>
                <add name="simple" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
            </providers>
        </roleManager>
        <membership defaultProvider="simple">
            <providers>
                <clear/>
                <add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
            </providers>
        </membership>
    </system.web>
    
    • 在根目录中创建了 _AppStart.cshtml 以初始化数据库连接和自动化。应用启动时在 db 中创建表。

    _AppStart.cshtml

    @{
        if (!WebSecurity.Initialized)
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }
    }
    
    • 添加了过滤器以确保身份验证请求期间的数据库连接。这与在每个控制器上手动放置 InitializeSimpleMembership 属性相同。

    App_Start\FilterConfig.cs

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new InitializeSimpleMembershipAttribute());
        }
    }
    

    【讨论】:

    【解决方案2】:

    https://mysqlmembershipprovider.codeplex.com/ 有一个已接受答案的升级版,它基于 xyz37 的作品和 ASP.NET Web Stack。

    【讨论】:

      【解决方案3】:

      是的,只需访问https://github.com/xyz37/MySqlSimpleMembershipProvider

      下载示例应用程序并根据您的需要进行修改。它开箱即用,效果很好。在创建用户和适当权限后第一次运行应用程序时,如果出现无法创建数据库的错误,请刷新浏览器一两次,它将创建数据库。

      【讨论】:

        【解决方案4】:

        我在 GitHub 上创建 MySqlSimpleMembershipProvider 并制作示例项目。

        https://github.com/xyz37/MySqlSimpleMembershipProvider

        就是这样。

        感谢您回答这个问题。

        点击示例截图:https://raw.github.com/xyz37/MySqlSimpleMembershipProvider/master/_ScreenShot/SimpleMembershipProviderTest.png

        【讨论】:

        • 这是我刚刚使用 Kim 的应用程序的答案,它有效
        • @Kim Ki Won,我尝试将扩展添加到我的项目中,但成功有限。最大的问题是数据库上下文。在 MySql.Web.Extension 项目中有一个 UserProfile 类,它与 MVC4 模板附带的部分类 UserProfile 非常相似。这是为什么呢?
        【解决方案5】:

        令人惊讶的是,那里的供应商很少,对于 MySQL 来说似乎没有,这真的很可悲。 覆盖 SimpleMemberShip Provider 以使用 MySQL 似乎很容易,但我找不到为此制作工作包的人。

        但是我确实找到了一个看起来不错的 MonogDB 包(虽然没有测试它) http://extmongomembership.codeplex.com/

        我们只能希望 MySQL 将来会支持这一点——尽管我对此表示怀疑,因为没有关于它的公告。

        【讨论】:

          【解决方案6】:

          我正在使用 LLBLGen(适用于 MySql、Oracle、Firebird、DB2 等):SimpleMembershipProvider in MVC4 for MySql, Oracle, and more with LLBLGen

          您可以通过使用您想要的任何 DAL 策略创建自己的 ExtendedMembershipProvider 实现来执行本文中描述的相同操作。如果您想使用实体框架,您将使用支持实体框架的 MySql 提供程序编写您的提供程序实现(请参阅:DevArt's MySql Entity Framework Tutorial)。

          【讨论】:

            【解决方案7】:

            很遗憾,没有。

            SimpleMembershipProvider 最终只是我们又爱又恨的旧 MembershipProvider 的派生类。

            之所以存在,是因为人们不喜欢您必须重写多少抽象函数才能使自定义 MembershipProvider 正常工作。所以这是MembershipProvider 的一个非常简单的实现。您必须返回使用 SimpleMembershipProvider 重新覆盖这些函数的实现。

            我对修改数据库设计有同样的问题,不得不回到自定义的MembershipProvider 类。

            另外,取自微软员工/ASP.NET 开发人员John Galloway's blog

            虽然 SimpleMembership 与数据库无关,但它可以跨 SQL Server 系列。它继续支持完整的 SQL Server,但它 也适用于 SQL Azure、SQL Server CE、SQL Server Express 和 本地数据库。一切都实现为 SQL 调用,而不是要求 存储过程、视图、代理和更改通知。

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

            【讨论】:

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