最近在项目中使用了中的 Membership 框架本文将在这里讨论如何将其进行扩展以适应实际项目的需求期间经过不断的摸索领会也查找了一些相关的资料下面将会给出完整的一个解决方案——通过表关联的方式进行扩展当然这只是实现的一个思路在此和大家探讨 网上也有很多相关的讨论解决方案的文章但是大多数都是梗概没有详细地引导初接触该框架的开发者如何进行实现这里提出的方案思路是通过userid字段进行关联相信但凡要用Membership的开发人员都熟悉那几个基本的aspnet_开头的数据表也已经知道它们中各个字段的含义 可能大多数开发者遇到的问题是默认的aspnet_Users中不足以满足自定义的用户信息而且很多大字段也不适合保存在Profile中那么你可以通过如下的方式进行用户注册在用户点击注册按钮的时候首先使用MembershipCreateUser方法在aspnet_Users中注册一个用户注册之前你可以设定自己项目中所需的注册条件比如允不允许姓名相同等等(代码中的条件是一个区只能有一个该姓名的showfolk) if (!showfolkSysExists(name section)) { //启用membership创建一个用户 try { MembershipUser newUser = MembershipCreateUser(UserNameText PasswordText); } catch (MembershipCreateUserException exception) { ErrorMessageText = GetErrorMessage(exceptionStatusCode); return; } catch (HttpException ex) { ErrorMessageText = exMessage; return; } } 然后将注册信息插入自己的表中这里为了关联aspnet_Users表需要在自己定义的表中加入字段userid(GUID) 下面先给出一个创建用户的存储过程InsertUser CREATE PROCEDURE InsertUser @UserName VARCHAR() =NULL @InstitutionID INT = NULL @Email VARCHAR() = NULL @Phone VARCHAR() =NULL @Mobile VARCHAR() =NULL AS BEGIN DECLARE @UserId uniqueidentifier SELECT @UserId = UserId FROM dboaspnet_Users WHERE LOWER(@UserName) = LoweredUserName AND @ApplicationId = ApplicationId IF ( @UserId IS NOT NULL ) BEGIN INSERT Users( userid username institutionID email phone mobile ) VALUES ( @Userid @UserName @InstitutionID @Email @phone @mobile ) END END
GO 存储过程开始的前两句就是通过 @UserName 的值来反查 aspnet_Users 中的 UserId字段接下来再插入到自定义的表中这样成员角色管理部分可以使用默认的aspnet_Users表而自定义的信息可以使用自己的表了 下面是我在 WebConfig中对 membership 的设定去掉了密码中默认需要的特殊字符和唯一的Email地址的限制供参考 <membership defaultProvider=AspNetMembershipProvider userIsOnlineTimeWindow=> <providers> <remove name=AspNetSqlMembershipProvider/> <clear /> <add name=AspNetMembershipProvider requiresQuestionAndAnswer=false type=SystemWebSecuritySqlMembershipProvider connectionStringName=SqlServices enablePasswordRetrieval=false minRequiredNonalphanumericCharacters= minRequiredPasswordLength= enablePasswordReset=false passwordFormat=Hashed requiresUniqueEmail=false applicationName=BJWL/> </providers> </membership> |