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 = 真;
break;
}
}
if (!allowed)
{
return;
}
}
set_Cookie(userToLogin.Username, "1");
}
}
catch
{
}
}
修改密碼
這個假設是基於登入已經發生的,如果你的假設不是這樣需要加入自己的判斷。
public void ChangePassword()
{
try
{
ForumContext forumContext = ForumContext.Current;
User user = forumContext.User;
if (user != null)
{
user.ChangePassword(Password, NewPassword);
}
}
catch
{
}
}
設定cookie
public void set_Cookie(string Username, string Selet_item)
{
if(Selet_item == "0")
{
FormsAuthentication.SetAuthCookie(Username,false);
}
else
{
ForumContext forumContext = ForumContext.Current;
FormsAuthentication.SetAuthCookie(Username,true);
forumContext.Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.
_Now.AddDays(System.Convert.ToInt32(Selet_item));
}
}
最後在已有系統的註冊,登錄,修改的最後Response.Redirect這頁就ok,不喜歡Redirect,Server.Transfer,xmlhttp都行,看你需要的展現了。還有一點很關鍵,就是要加密了你傳輸的字串,要不明文就…※¥※×%※× ,要是嫌還不安全就用ip判斷一下誰可以訪問這頁!