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 = "Anonymous@Anonymous.com";
  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
 {
 }
} 
修改密碼
這個假設是基于登錄已經發生的,如果你的假設不是這樣需要加入自己的判斷。
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判斷一下誰可以訪問這頁!
新聞熱點
疑難解答