最近在項目中使用了中的 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>
From:http://tw.wingwit.com/Article/program/ASP/201311/21688.html