使用Simple Membership Provider与mysql

5

是否可以使用Simple Membership Provider与mysql(同时使用Entity Framework)?

如果可以,如何实现。

非常感谢任何文档/链接。

提前致谢。

7个回答

9

这是答案,我刚刚使用了Kim的应用程序,它有效。 - Diin
@Kim Ki Won,我尝试添加扩展到我的项目,但效果有限。最大的问题是DB上下文。在MySql.Web.Extension项目中,您有一个名为UserProfile的类,它与MVC4模板中提供的部分类UserProfile非常相似。这是为什么? - William T. Mallard

4
请看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的引用。 在每个引用上修改属性“Copy Local”为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文件,用于初始化数据库连接,并在应用程序启动时自动创建表。

_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());
    }
}

1
链接无法打开 :( http://fabiocanada.ca/2012/11/24/use-simplemembership-and-oauth-with-any-database-and-datatype/ - Pankaj Nema

2
很遗憾,不行。 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和LocalDB一起使用。所有东西都是以SQL调用的方式实现的,而不需要存储过程、视图、代理和更改通知。请注意,SimpleMembership仍然需要某种类型的SQL Server,而不能与MySQL、NoSQL数据库等一起使用。如果您想知道为什么,可以使用像ILSpy这样的工具查看WebMatrix.WebData.dll中的代码 - 在创建和初始化表时特别执行了SQL Server特定的SQL语句。似乎您可以在单独创建表的情况下使用其他数据库,但我没有尝试过,并且目前不支持此功能。

1
很惊讶地发现提供商很少,似乎没有针对MySQL的提供商,这真的很遗憾。看起来很容易覆盖SimpleMemberShip提供程序以使用MySQL,但我找不到任何人为此制作的工作包。
然而,我确实找到了一个MonogDB的包,看起来还不错(尽管没有测试)http://extmongomembership.codeplex.com/ 我们只能希望MySQL将来会支持此功能 - 尽管我怀疑,因为没有任何公告。

1

0

0

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

下载示例应用程序并根据需要进行修改。它开箱即用,非常好用。第一次创建用户并设置适当的权限后,如果遇到无法创建数据库的错误,请刷新浏览器一两次,它就能够创建数据库了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接