Membership用法詳解
用戶與角色管理在asp.net2.0中是通過Membership和Roles兩個類來實現的。
Membership:用戶成員賬號管理,用戶名、密碼、郵箱等
Roles:負責用戶和羣組之間關係管理。
l Membership類:主要是創建用戶帳號、驗證用戶身份和管理用戶設置
屬性:
1) EnablePasswordReset:獲取一個值,以指示是否可以重置密碼。
2) EnablePasswordRetrieval:獲取一個值,以指示是否允許用戶提取密碼。
3) HashAlgorithmType:獲取一個值,密碼的算法識別項
4) MaxInvalidPasswordAttempts:獲取一個值,鎖定用戶之間所允許的重試次數。
5) MinRequiredNonAlphanumericCharacters:獲取一個值,密碼中最少的特殊字符數。
6) MinRequiredPasswordLength:取得最小密碼的長度
7) RequiresQuestionAndAnswer:獲取一個值,指示是否要求用戶解答密碼問題以重新提取密碼。
8) UserIsOnlineTimeWindow:指定用戶最後活動日期之後的分鐘數,其間的用戶視爲在線。
方法:
1) CreateUser():創建新的用戶
2) DeleteUser():從數據庫刪除用戶
3) GetUser():取得成員資格用戶的信息
4) UpdateUser():更新用戶信息
5) ValidateUser():驗證用戶賬號與密碼是否用效
6) GetAllUsers():取得數據庫中用戶的集合
7) FindUsersByEmail():根據email查詢用戶
8) FinndUsersByName():根據帳號名稱查詢用戶
9) GetNumberOfUsersOnline():取得目前訪問程序的在線用戶
10) GetUserNameByEmail():根據郵箱查詢用戶名
l MembershipUser類
負責管理與更新Membership表中的相關資料。別把MembershipUser類與Membership類混了,實際上是同MembershipUser處理完成後交由Membership處理。如:
1) 取得或設置用戶相關信息。如UserName,Email和帳號創建時間。
2) 讀取、改變用戶密碼
3) 改變密碼提示問題與答案
4) 解鎖帳號
5) 設置是否允許用戶能夠被驗證
屬性:
1) CreationDate:取得用戶的創建時間
2) Email:取得或設置用戶的電子郵件地址
3) IsApproved:取得或設置用戶是否可以進行驗證
4) IsLockedOut:取出用戶是否被鎖定
5) IsOnLine:指出用戶目前是否在線
6) LastActivityDate:取得或設置用戶最後一次驗證或訪問程序的日期時間
7) LastLoclkoutDate:取是最近鎖定用戶的日期和時間
8) LastLoginDate:取得或設置用戶上一次驗證的日期時間
9) LastPasswordChangedDate:取得用戶密碼上一次更新的時間
10) PasswordQuestion:取得用戶的安全密碼的問題
11) UserName:取得用戶登錄的名稱
方法:
12) ChangePassword():更改用戶密碼
13) ChangePasswordQuestionAndAnswer:更改用戶的密碼安全問題和解答
14) GetPassword():取得用戶密碼
15) ResetPassword():將用戶的密碼重置,並自動產生新密碼
16) UnlockUser():解除帳號鎖定,以便能進行身份驗證
l Roles類
方法:
1) AddUsersToRole():將多個用戶加入一個角色
2) AddUsersToRoles():將多個用戶加入多個角色
3) AddUserToRole():將一個用戶加入一個角色
4) AddUserToRoles():將一個用戶加入多個角色
5) CreateRole():創建角色
6) DeleteRole():刪除角色
7) FindUsersInRole():尋找某個角色中的所有用戶
8) GetAllRoles():取得所有角色的清單
9) GetRolesForUser():取得用戶所屬角色的清單
10) IsUserInRole():指出用戶是否在指定的角色中
11) RemoveUserFromRole():從一個角色中移除一個用戶
12) RemoveUserFromRoles():從多個角色中移出一個用戶
13) RemoveUsersFromRole():從一個角色中移除多個用戶
14) RemoveUsersFromRoles():從多個角色中移除多個用戶名
15) RoleExists():用戶角色名是否已存在於角色表中。
代碼實現(1)
創建用戶:
MembershipCreateStatus mc;
Membership.CreateUser(txtUid.Text, txtPwd.Text, txtEmail.Text, txtQuestion.Text, txtAnswer.Text, true, out mc);
Response.Write(mc.ToString());
刪除用戶:
if (Membership.DeleteUser(txtUid.Text))
Response.Write("OK");
else
Response.Write("Error");
修改用戶信息:
if (User.Identity.IsAuthenticated)
{
MembershipUser user = Membership.GetUser();
user.Email = txtEmail.Text;
Membership.UpdateUser(user);
Response.Write(user.Email.ToString());
}
驗證用戶登錄信息
bool isok = Membership.ValidateUser(txtUid.Text, txtPwd.Text);
if (isok)
{
FormsAuthentication.SetAuthCookie(txtUid.Text, false);
Response.Write("OK");
}
else
{
Response.Write("Error");
}
獲取登錄用戶的信息
if (User.Identity.IsAuthenticated)
{
MembershipUser myuser = Membership.GetUser();
if (myuser != null)
{
Response.Write(myuser.CreationDate);
Response.Write(myuser.Email);
Response.Write(myuser.IsLockedOut);
Response.Write(myuser.IsOnline);
Response.Write(myuser.PasswordQuestion);
Response.Write(myuser.UserName);
}
}
根據密碼問題的答案返回用戶密碼
if (User.Identity.IsAuthenticated)
{
MembershipUser user = Membership.GetUser(txtUid.Text);
txtPwd.Text = user.GetPassword(txtAnswer.Text);
}
修改用戶密碼
if (User.Identity.IsAuthenticated)
{
MembershipUser user = Membership.GetUser();
user.ChangePassword(txtPwd.Text,txtPWd2.Text);
Response.Write(user.GetPassword(txtAnswer.Text));
}
解鎖用戶
MembershipUser user = Membership.GetUser(txtUid.Text);
bool b = user.UnlockUser();
Response.Write(b+" "+user.IsLockedOut);
拒絕用戶登錄
MembershipUser user = Membership.GetUser(txtUid.Text);
user.IsApproved = false;
Membership.UpdateUser(user);
Response.Write(user.IsLockedOut);
允許用戶登錄
MembershipUser user = Membership.GetUser(txtUid.Text);
user.IsApproved = true;
Membership.UpdateUser(user);
Response.Write(user.IsLockedOut);
根據用戶名或郵箱來檢索用戶
MembershipUserCollection users;
switch(listType.Text)
{
case "姓名":
users = Membership.FindUsersByName(txtFind.Text);
if (users.Count > 0)
{
showUserInfo(users);
}
else
{
Response.Write("未找到用戶名");
}
break;
case "郵箱":
users = Membership.FindUsersByEmail(txtFind.Text);
if (users.Count > 0)
{
showUserInfo(users);
}
else
{
Response.Write("未找到郵箱");
}
break;
}
代碼實現(2)
加載所有用戶
MembershipUserCollection user = Membership.GetAllUsers();
listUser.DataSource = user;
listUser.DataBind();
加載所有角色
string[] role = Roles.GetAllRoles();
listRole.DataSource = role;
listRole.DataBind();
添加新角色
Roles.CreateRole(txtRole.Text);
刪除角色
Roles.DeleteRole(txtRole.Text);
將一個用戶添加到一個角色
Roles.AddUserToRole(listUser.Text, listRole.Text);
將一個用戶從一個角色中移除
Roles.RemoveUserFromRole(listUser.Text, listRole.Text);
將一個用戶加入到多個角色中去
int n = 0;
foreach (ListItem li in listRole.Items)
{
if (li.Selected) n++;
}
string[] roles = new string[n];
int i=0;
foreach(ListItem li in listRole.Items)
{
if(li.Selected)
{
roles[i++] = li.Text;
}
}
Roles.AddUserToRoles(listUser.Text, roles);
將一個用戶的所有角色移除
string[] str = Roles.GetRolesForUser(listUser.Text);
Roles.RemoveUserFromRoles(listUser.Text,str);
將多個用戶加入到一個角色中去
int n = 0;
foreach (ListItem li in listUser.Items)
{
if (li.Selected) n++;
}
string[] users = new string[n];
int i=0;
foreach (ListItem li in listUser.Items)
{
if (li.Selected)
{
users[i++] = li.Text;
}
}
Roles.AddUsersToRole(users,listRole.Text);
將一個角色中的所有的用戶移除
string[] users = Roles.GetUsersInRole(listRole.Text);
Roles.RemoveUsersFromRole(users, listRole.Text);
將多個用戶加入到多個角色
int n = 0;
foreach (ListItem li in listUser.Items)
{
if (li.Selected) n++;
}
string[] strUser = new string[n];
n = 0;
foreach (ListItem li in listRole.Items)
{
if (li.Selected) n++;
}
string[] strRoles = new string[n];
for (int i = 0; i < listUser.Items.Count; i++)
{
strUser[i] = listUser.Items[i].Text;
}
for (int i = 0; i < listRole.Items.Count; i++)
{
strRoles[i] = listRole.Items[i].Text;
}
Roles.AddUsersToRoles(strUser, strRoles);
1.創建用戶...
string userName = txtUsername.Text;
string passWord = txtPassword.Text;
string email = txtEmail.Text;
string passwordQuestion = ddlPasswordQuestion.SelectedValue;
string passwordAnswer = txtPasswordAnswer.Text;
MembershipCreateStatus result;
// 創建一個用戶
Membership.CreateUser(userName, passWord, email, passwordQuestion, passwordAnswer, true, out result);
//顯示創建結果,並做後期處理
lblResults.Visible = true;
switch (result)
{
case MembershipCreateStatus.Success:
txtUsername.Text = "";
txtPassword.Text = "";
txtEmail.Text = "";
ddlPasswordQuestion.SelectedIndex = -1;
txtPasswordAnswer.Text = "";
lblResults.Text = "新用戶創建成功.";
break;
case MembershipCreateStatus.InvalidUserName:
lblResults.Text = "無效的用戶名.";
break;
case MembershipCreateStatus.DuplicateEmail:
lblResults.Text = "重複的電子郵件地址.";
break;
case MembershipCreateStatus.InvalidQuestion:
lblResults.Text = "無效的密碼問題.";
break;
case MembershipCreateStatus.DuplicateUserName:
lblResults.Text = "重複的用戶名.";
break;
case MembershipCreateStatus.InvalidAnswer:
lblResults.Text = "無效的密碼答案";
break;
case MembershipCreateStatus.InvalidEmail:
lblResults.Text = "無效的電子郵件地址";
break;
case MembershipCreateStatus.InvalidPassword:
lblResults.Text = "無效的密碼";
break;
default:
lblResults.Text = "在創建用戶過程中發生錯誤.";
break;
}