MySQL 的 Membership 和 Role 提供程序






4.86/5 (68投票s)
2005年11月16日
1分钟阅读

1083789

5818
本文档提供了两个文件,包含用于 ASP.NET v2.0 的成员资格提供程序和角色提供程序。
引言
本文档提供了两个文件,包含用于 ASP.NET v2.0 的成员资格提供程序和角色提供程序。
Microsoft 在框架中提供了一个成员资格提供程序,但仅适用于 SQL Server。 该类似乎无法用于 MySQL,所以我决定根据框架 SDK 中包含的 ODBC 提供程序示例代码编写一个新的提供程序。
如何使用
要使用这些类,您需要最新的 MySQL .NET Connector。 您可能需要使用新的 C# 编译器为 v2.0 重新编译它(但新的框架通常支持 v1.0 或 1.1 程序集)。
- 创建表(请注意,这些 SQL 命令可能不适用于 MySQL 4)。
CREATE TABLE Roles ( Rolename Varchar (255) NOT NULL, ApplicationName varchar (255) NOT NULL ) CREATE TABLE UsersInRoles ( Username Varchar (255) NOT NULL, Rolename Varchar (255) NOT NULL, ApplicationName Text (255) NOT NULL ) ALTER TABLE 'usersinroles' ADD INDEX ( 'Username', 'Rolename', 'ApplicationName') ; ALTER TABLE 'roles' ADD INDEX ( 'Rolename' , 'ApplicationName' ) ; CREATE TABLE 'users' ( 'PKID' varchar(36) collate latin1_general_ci NOT NULL default '', 'Username' varchar(255) collate latin1_general_ci NOT NULL default '', 'ApplicationName' varchar(100) collate latin1_general_ci NOT NULL default '', 'Email' varchar(100) collate latin1_general_ci NOT NULL default '', 'Comment' varchar(255) collate latin1_general_ci default NULL, 'Password' varchar(128) collate latin1_general_ci NOT NULL default '', 'PasswordQuestion' varchar(255) collate latin1_general_ci default NULL, 'PasswordAnswer' varchar(255) collate latin1_general_ci default NULL, 'IsApproved' tinyint(1) default NULL, 'LastActivityDate' datetime default NULL, 'LastLoginDate' datetime default NULL, 'LastPasswordChangedDate' datetime default NULL, 'CreationDate' datetime default NULL, 'IsOnLine' tinyint(1) default NULL, 'IsLockedOut' tinyint(1) default NULL, 'LastLockedOutDate' datetime default NULL, 'FailedPasswordAttemptCount' int(11) default NULL, 'FailedPasswordAttemptWindowStart' datetime default NULL, 'FailedPasswordAnswerAttemptCount' int(11) default NULL, 'FailedPasswordAnswerAttemptWindowStart' datetime default NULL, PRIMARY KEY ('PKID') ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
- 将
MySqlMembershipProvider::encryptionKey
更改为您选择的随机十六进制值。 - 将这两个文件上传到 ~/App_Code。
- 使用以下模板修改您的 web.config(如果您在共享托管服务器上,则需要将
writeExceptionsToEventLog
设置为false
)<connectionStrings> <add name="ConnString" connectionString="Database=YOURDBNAME;Data Source=localhost; User Id=YOURUSERNAME;Password=YOURPWD" /> </connectionStrings> <system.web> <roleManager defaultProvider="MySqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" > <providers> <clear /> <add name="MySqlRoleProvider" type="Andri.Web.MySqlRoleProvider" connectionStringName="ConnString" applicationName="YOURAPPNAME" writeExceptionsToEventLog="true" /> </providers> </roleManager> <membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15"> <providers> <clear /> <add name="MySqlMembershipProvider" type="Andri.Web.MySqlMembershipProvider" connectionStringName="ConnString" applicationName="YOURAPPNAME" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" passwordFormat="Hashed" writeExceptionsToEventLog="true" /> </providers> </membership> </system.web>
- 完成了! 如果需要,您可以使用 ASP.NET 框架 v2.0 中提供的登录控件,或使用您自己的控件。
您可以随意使用此代码,但如果您进行了改进或错误修复,请给我发送电子邮件。 这不正是这个网站的意义所在,分享吗?