您的位置:首页 > 编程语言 > ASP

ASP.NET + MySQL 开发笔记 - MembershipProvider 和 RoleProvider 用法

2008-08-17 18:58 671 查看
以前使用一个老外写的 MembershipProvider 和 RoleProvider, 是从 codeproject.com 网站上找到的, 用起来感觉还不错. 但是没有实现用户的个性化引擎, 即不支持Profile. 采用的 MySql .Net 连接器是 5.0.6

现在采用 MySql .Net 连接器是 5.2.2 , 其中已经包含了用户提供程序和角色提供程序.

配置当中的注意事项:

1. 将 MySql.Data.dll 和 MySql.Web.dll 拷贝到 网站的 Bin 目录下. MySql.Web.dll 是 角色提供程序必要的组件.

2. 配置 Web.config

例如: 在 System.Web 节内配置如下

用户管理提供程序

<membership defaultProvider="MySqlMembershipProvider">

<providers>

<clear />

<add autogenerateschema="true" connectionStringName="AppDBConnString"

enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true"

applicationName="MySite" requiresUniqueEmail="true" passwordFormat="Hashed"

maxInvalidPasswordAttempts="5" minRequiredPasswordLength="1"

minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"

passwordStrengthRegularExpression="" description="MySQL AB Membership Provider"

name="MySqlMembershipProvider" type="MySql.Web.Security.MySqlMembershipProvider" />

</providers>

</membership>

角色提供程序

<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES"

defaultProvider="MySqlRoleProvider">

<providers>

<clear />

<add connectionStringName="AppDBConnString" applicationName="MySite"

writeExceptionsToEventLog="false" name="MySqlRoleProvider" type="MySql.Web.Security.MySqlRoleProvider" />

</providers>

</roleManager>

解释:

(1) connectionStringName="AppDBConnString" 放置的是 MySQL 数据库的链接字符串设置

(2) autogenerateschema="true" 设置为 true 时, 当在 VS 当中选择"网站"菜单进行配置时, 会自动生成相关的数据表(共7个).

(3) applicationName="MySite" 是应用程序的标识, 如果你在一台计算机上有多个网站, 这个标识不能重复, 否则提供程序将会出错

3. 配置成功后, 可以将 MySQL 自动生成的用户及角色管理表导出来, 生成 SQL 语句, 以便于整个系统的每日构建. 这时就可以将 autogenerateschema 设置成 false. 可以采用 MySql Query Browser 将名称以 my_asp_ 开始的几个表导出为 Create 形式的 Sql 语句. 需要注意的有一点, 就是 my_aspnet_schemaversion 表中必须有一条记录, 此表仅有一个字段 version , 其值为 3. 没有此条记录, 则提供程序会报错.

也可以将以下的 sql 语句保存为 sql 文件, 采用 source 语句执行它, 为 MySQL 加上这些相关的表:

/*

MySql 官方 Memeber 及 Role 服务提供程序所使用的数据库结构

*/

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_applications`;

CREATE TABLE `cfh2008`.`my_aspnet_applications` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(256) default NULL,

`description` varchar(256) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_membership`;

CREATE TABLE `cfh2008`.`my_aspnet_membership` (

`userId` int(11) NOT NULL default '0',

`Email` varchar(128) default NULL,

`Comment` varchar(255) default NULL,

`Password` varchar(128) NOT NULL,

`PasswordKey` char(32) default NULL,

`PasswordFormat` tinyint(4) default NULL,

`PasswordQuestion` varchar(255) default NULL,

`PasswordAnswer` varchar(255) default NULL,

`IsApproved` tinyint(1) default NULL,

`LastActivityDate` datetime default NULL,

`LastLoginDate` datetime default NULL,

`LastPasswordChangedDate` datetime default NULL,

`CreationDate` datetime default NULL,

`IsLockedOut` tinyint(1) default NULL,

`LastLockedOutDate` datetime default NULL,

`FailedPasswordAttemptCount` int(10) unsigned default NULL,

`FailedPasswordAttemptWindowStart` datetime default NULL,

`FailedPasswordAnswerAttemptCount` int(10) unsigned default NULL,

`FailedPasswordAnswerAttemptWindowStart` datetime default NULL,

PRIMARY KEY (`userId`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='2';

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_profiles`;

CREATE TABLE `cfh2008`.`my_aspnet_profiles` (

`userId` int(11) NOT NULL,

`valueindex` longtext,

`stringdata` longtext,

`binarydata` longblob,

`lastUpdatedDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

PRIMARY KEY (`userId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_roles`;

CREATE TABLE `cfh2008`.`my_aspnet_roles` (

`id` int(11) NOT NULL auto_increment,

`applicationId` int(11) NOT NULL,

`name` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_schemaversion`;

CREATE TABLE `cfh2008`.`my_aspnet_schemaversion` (

`version` int(11) default NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_users`;

CREATE TABLE `cfh2008`.`my_aspnet_users` (

`id` int(11) NOT NULL auto_increment,

`applicationId` int(11) NOT NULL,

`name` varchar(256) NOT NULL,

`isAnonymous` tinyint(1) NOT NULL default '1',

`lastActivityDate` datetime default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cfh2008`.`my_aspnet_usersinroles`;

CREATE TABLE `cfh2008`.`my_aspnet_usersinroles` (

`userId` int(11) NOT NULL default '0',

`roleId` int(11) NOT NULL default '0',

PRIMARY KEY (`userId`,`roleId`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

use cfh2008;

insert into my_aspnet_schemaversion (version) values (3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: