Asp.Net Forums以下簡稱ANF,版本2.0,本文系數流水帳,只是記錄了一下今的工作,沒啥技術含量。
已有系統已經有自己的一套用戶系統,需要掛接ANF,要求在已有系統用戶注冊,登錄,修改密碼時,在ANF中也做出相應反映。不要求ANF的用戶變化影響已有系統,只是單向同步。
在盡量少動已有代碼的情況下找一種簡單的方式來完成整合。之前看了寶玉的CnForums和已有系統的整合方案,最後偷懶決定在已有系統上述動作結束後將用戶相關信息和操作類型附加在url後面傳給一個新建頁來處理在ANF中執行相關操作。
這新建頁暫且叫bridge.aspx 當然要建在ANF的項目中該using的都using了,負責接收用戶名密碼等信息然後執行相應的ANF操作。
注冊
注冊很簡單,我的Username和Password是自己包裝的屬性,從Request中獲取信息,我們系統沒有Email就隨便添一個,接下來要給AccountStatus設置為通過,IsAnonymous關掉。Users.Create中那個bool參數代表是否給用戶發送注冊成功提示的郵件,我沒郵件當然關掉。
注意我在所有的地方都catch吸收掉錯誤,而無返回,你不一定要這麼做。
public void Register()
{
try
{
User user = new User();
user.Username = Username;
user.Password = Password;
user.Email = "[email protected]";
user.AccountStatus = UserAccountStatus.Approved;
user.IsAnonymous = false;
Users.Create(user, false);
}
catch
{
}
}
登錄
基本上都是復制粘貼過來的,注意最後的setcookie,這是同步登錄的關鍵。
public void Login()
{
try
{
User userToLogin = new User();
userToLogin.Username = Username;
userToLogin.Password = Password;
LoginUserStatus loginStatus = Users.ValidUser(userToLogin);
if (loginStatus == LoginUserStatus.Success)
{
if (!Globals.GetSiteSettings().AllowLogin)
{
bool allowed = false;
int userid = Users.FindUserByUsername(userToLogin.Username).UserID;
ArrayList roles = Roles.GetRoles(userid);
foreach (Role role in roles)
{
if (role.Name == "Site Administrators" || role.Name == "Global Administrators")
{
allowed = true;
break;
}
}
if (!allowed)
{
return;
}
}
set_Cookie(userToLogin.Username, "1");
}
}
catch
{
}
}