轉:ASP.NET Forums與現有系統整合方案
Asp.Net Forums以下簡(jiǎn)稱(chēng)ANF,版本2.0,本文系數流水帳,只是記錄了一下今的工作,沒(méi)啥技術(shù)含量。
已有系統已經(jīng)有自己的一套用戶(hù)系統,需要掛接ANF,要求在已有系統用戶(hù)注冊,登錄,修改密碼時(shí),在A(yíng)NF中也做出相應反映。不要求ANF的用戶(hù)變化影響已有系統,只是單向同步。
在盡量少動(dòng)已有代碼的情況下找一種簡(jiǎn)單的方式來(lái)完成整合。之前看了寶玉的CnForums和已有系統的整合方案,最后偷懶決定在已有系統上述動(dòng)作結束后將用戶(hù)相關(guān)信息和操作類(lèi)型附加在url后面傳給一個(gè)新建頁(yè)來(lái)處理在A(yíng)NF中執行相關(guān)操作。
這新建頁(yè)暫且叫bridge.aspx 當然要建在A(yíng)NF的項目中該using的都using了,負責接收用戶(hù)名密碼等信息然后執行相應的ANF操作。
注冊
注冊很簡(jiǎn)單,我的Username和Password是自己包裝的屬性,從Request中獲取信息,我們系統沒(méi)有Email就隨便添一個(gè),接下來(lái)要給AccountStatus設置為通過(guò),IsAnonymous關(guān)掉。Users.Create中那個(gè)bool參數代表是否給用戶(hù)發(fā)送注冊成功提示的郵件,我沒(méi)郵件當然關(guān)掉。
注意我在所有的地方都catch吸收掉錯誤,而無(wú)返回,你不一定要這么做。
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
{
}
}
登錄
基本上都是復制粘貼過(guò)來(lái)的,注意最后的setcookie,這是同步登錄的關(guān)鍵。
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
{
}
}
修改密碼
這個(gè)假設是基于登錄已經(jīng)發(fā)生的,如果你的假設不是這樣需要加入自己的判斷。
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這頁(yè)就ok,不喜歡Redirect,Server.Transfer,xmlhttp都行,看你需要的展現了。還有一點(diǎn)很關(guān)鍵,就是要加密了你傳輸的字符串,要不明文就……※¥※×%※× ,要是嫌還不安全就用ip判斷一下誰(shuí)可以訪(fǎng)問(wèn)這頁(yè)!
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。