mysql - 在 MVC2 中使用 MySQL 的成员资格提供程序

标签 mysql asp.net-mvc-2 membership

我已经在这个论坛上阅读了几篇关于此问题的帖子,但似乎没有任何效果。我尝试使用最新版本的连接器 (6.3.6.0) 和 VS2010 将默认的基于 SQL Server 的提供程序替换为 MySQL 提供程序,但在访问 WSAT 中的安全部分时,我不断收到错误消息。这是我的步骤:

1) 创建一个新的mysql数据库。 2) 创建一个新的MVC2应用程序。 3)更改web.config如下:

    <connectionStrings>
     <remove name="LocalMySqlServer"/>
     <add name="LocalMySqlServer"
      connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
      providerName="MySql.Data.MySqlClient"/>
     <remove name="ApplicationServices"/>
     <add name="ApplicationServices"
      connectionString="Data Source=127.0.0.1;Port=3306;Database=Sample;User id=root;Password=mysql;"
       providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
    ...
    <membership defaultProvider="MySqlMembershipProvider">
     <providers>
     <clear/>
     <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
     connectionStringName="MySqlMembershipConnection"
     enablePasswordRetrieval="false"
     enablePasswordReset="true"
     requiresQuestionAndAnswer="false"
     requiresUniqueEmail="true"
     passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5"
     minRequiredPasswordLength="6"
     minRequiredNonalphanumericCharacters="0"
     passwordAttemptWindow="10"
     applicationName="/"
     autogenerateschema="true"/>
    </providers>
    </membership>

<profile>
 <providers>
 <clear/>
 <add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
         name="MySqlProfileProvider"
         applicationName="/"
         connectionStringName="MySqlMembershipConnection"
         autogenerateschema="true"/>
 </providers>
</profile>

<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
 <providers>
 <clear />
 <add connectionStringName="MySqlMembershipConnection"
  applicationName="/"
  name="MySqlRoleProvider"
  type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
  autogenerateschema="true"/>
 </providers>
</roleManager>

<machineKey validationKey="AutoGenerate" validation="SHA1"/>

当我运行 WSAT 并单击安全性时,出现此错误:

There is a problem with your selected data store. This can be caused by an invalid server name or credentials, or by insufficient permission. It can also be caused by the role manager feature not being enabled. Click the button below to be redirected to a page where you can choose a new data store.

The following message may help in diagnosing the problem: The source was not found, but some or all event logs could not be searched. To create the source, you need permission to read all event logs to make sure that the new source name is unique. Inaccessible logs: Security.

谁能告诉我这个程序有什么问题吗?感谢大家!

最佳答案

终于我成功了,我想在这里分享信息。我在 ASP.NET MVC 2 网站中使用最新版本的 Connector/Net (6.3.6)。这是我所做的:

1) 创建一个新的 MySql 数据库(或者使用您的数据库(如果有))。

2) 确保您的 machine.config 已启用 MySQLMembershpProvider 的架构自动生成。您可能知道,machine.config 通常位于 c:\windows\microsoft.net\framework[version]\config\machine.config 下。找到 MySQLMembershipProvider 条目并将属性 autogenerateschema="true"附加到元素中。整个元素将如下所示:

<add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" autogenerateschema="true"/>

3) 在您的 web.config 中(我指的是新创建的 Web 应用程序,因此请根据需要进行更改)更改连接字符串和提供程序,以便它们引用 MySql。通常:在connectionStrings下添加:

<remove name="ApplicationServices"/>
<add name="ApplicationServices" connectionString=connectionString="server=YOURSERVER;UserId=YOURUSER;password=YOURPASSWORD;Persist Security Info=True;database=YOURDATABASE;charset=utf8" providerName="MySql.Data.MySqlClient"/>

(顺便说一句,请注意连接字符串中的 charset=utf8:这对于成员资格来说不是必需的,但如果要使用此连接字符串来交换 Unicode 数据,则需要它:仅定义字符是不够的在您的 MySql 表字段中设置!)。

此外,在成员(member)资格/提供程序下...确保成员(member)资格提供程序元素(通常类似于添加 name="AspNetSqlMembershipProvider"...)connectionStringName 属性引用您上面设置的连接字符串(在我的例子中,connectionStringName="应用服务”)。对配置文件和 roleManager 提供程序执行相同的操作,其应如下所示:


<profile>
  <providers>
    <clear/>
    <add type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
         name="AspNetSqlProfileProvider"
         applicationName="/"
         connectionStringName="ApplicationServices"
         autogenerateschema="true"/>
  </providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
  <providers>
    <clear />
    <add connectionStringName="ApplicationServices"
         applicationName="/"
         name="MySqlRoleProvider"
         type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"
         autogenerateschema="true"/>
  </providers>
</roleManager>
<machineKey validationKey="AutoGenerate" validation="SHA1"/>

(注意 SHA1 验证!)。

4) 从 Visual Studio 启动 WSAT 并让它配置您的 MySql 数据库。它应该创建所需的所有表,并允许您创建用户和分配角色。注意表名的大小写!使用 WSAT 创建像 myaspnet_Users (而不是 myaspnet_users)这样的表,这可能会导致困惑(MySQL Workbench 似乎对此感到困惑,如果您有 2 个表,其名称仅大小写不同,则只会显示 1 个表。像 Navicat 这样的工具在这方面似乎更聪明)。最好让 WSAT 创建其表以避免这种麻烦。

最后,请记住,如果您要在某些关系中使用 my_aspnet... 表,则必须确保选择正确的 MySQL 数据库引擎,即不是 MyISAM 而是 InnoDB,否则即使设置了外键也会被忽略.

关于这个问题我能分享的就是这些。希望这可以为其他人节省一些时间......

关于mysql - 在 MVC2 中使用 MySQL 的成员资格提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970414/

相关文章:

php - 按 ID 搜索,但在下拉菜单中显示行信息

asp.net-mvc-2 - ASP.NET MVC2 - 如何创建表单?

mysql - 使用 SQL Server Express 进行小型 MVC 项目有问题吗?

php - PDO 删除查询不起作用

php - 我应该什么时候删除用户的登录 cookie?

c# - 使用 .net 成员(member)提供程序进行编程登录

asp.net - 使用 CAS 和 ASP.NET 成员(member)提供程序后端进行 SSO

c# - Membership provider用还是不用?

mysql - AWS数据管道-"Full copy of rds mysql table to s3"参数中没有连接字符串?

asp.net-mvc-2 - 区分具有相同签名的 GET/POST 操作方法的最佳 ASP.NET MVC 实践?