因為有一個 Struts2 網(wǎng)站發(fā)布,需要整合一個論壇來使用,公司的一個項目過去曾經(jīng)整合過一個英文論壇,但似乎不能滿足我們的需求,需要找一個成熟穩(wěn)定的中文論壇,與我們的系統(tǒng)結(jié)合。
最終選擇了 Discuz 作為我們的論壇系統(tǒng),主要是因為它提供了一套可用的 Passport API,來直接與我們現(xiàn)有系統(tǒng)進行整合。
下面摘錄 Discuz 文檔中的內(nèi)容來說明整合原理,隨后的幾篇中,將詳細(xì)描述具體的整合過程。
假設(shè)已設(shè)置如下變量或參數(shù)
- 掛接 Discuz! Passport 的應(yīng)用程序假設(shè)為一套 PHP 語言編寫的 CMS 系統(tǒng)
- Discuz! 的 URL 為 http://www.myforums.com
- 應(yīng)用程序的 URL 為 http://www.mywebsite.com
- 應(yīng)用程序的注冊頁面為 http://www.mywebsite.com/register.php
- 應(yīng)用程序的登錄頁面為 http://www.mywebsite.com/login.php?action=login
- 應(yīng)用程序的退出頁面為 http://www.mywebsite.com/login.php?action=logout
開啟通行證后的用戶登錄流程
- 如果用戶在論壇點擊“登錄”,則轉(zhuǎn)向到事先設(shè)置好的應(yīng)用程序登錄頁面(http://www.mywebsite.com/login.php?action=login),并在登錄頁面的 URL 中加入?yún)?shù) forward(加入 forward 后的鏈接例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在登錄后將用戶導(dǎo)向到指定的 URL。
- 應(yīng)用程序收到此請求后,按照慣例生成表單,并增加一個表單變量,將 GET 方式傳遞過來的 forward 參數(shù)通過表單進行傳遞。
- 用戶在應(yīng)用程序的表單中填寫登錄信息,并提交到應(yīng)用程序的登錄驗證程序。應(yīng)用程序驗證用戶提交的用戶名和密碼的合法性:
- 如果不通過:提示用戶名密碼錯誤,要求其返回上一頁重新填寫。
- 如果通過,需要進行如下操作:
- 設(shè)置自身 Cookie 或 Session,使得應(yīng)用程序自身處于登錄狀態(tài)。
- 檢查表單中是否提交了 forward 變量,如有,則意味著登錄請求可能是由論壇而來,將此變量傳遞到后面的請求中。如沒有,自行生成 forward 變量,使得論壇登錄后能夠跳轉(zhuǎn)回到應(yīng)用程序中。
- 通過 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,將登錄請求傳遞到論壇進行處理。其中 auth 用來將用戶信息與資料以特定的格式,加密傳遞給論壇,forward 用于告知論壇 Passport API 完成自身操作后轉(zhuǎn)向到的 URL 地址,verify 用于驗證前面兩個變量的有效性。auth、forward、verify 格式與結(jié)構(gòu)將在后面進行說明。
- Discuz! Passport API 在接收到由應(yīng)用程序通過 header() 提交過來的請求后,進行如下操作:
- 根據(jù) verify 判斷 auth 和 forward 變量是否合法,如合法則繼續(xù),否則終止。
- 將 auth 根據(jù)既定算法解密,并還原成數(shù)組,數(shù)組的內(nèi)容與格式將在后面進行說明。根據(jù)數(shù)組中的內(nèi)容,檢查此用戶是否存在。如存在,則根據(jù)上述數(shù)組中的內(nèi)容 UPDATE 論壇中相應(yīng)的用戶資料。如不存在,則使用數(shù)組中的信息 INSERT 到論壇用戶資料表中。
- 論壇設(shè)置 Cookie 或 Session,使得論壇自身處于登錄狀態(tài)。
- 根據(jù)應(yīng)用程序反饋的 forward 值,通過 header('Location: http://xxx') 的形式將頁面跳轉(zhuǎn)到 forward 變量指定的 URL。
- 至此,登錄流程結(jié)束
開啟通行證后的用戶退出流程
- 如果用戶在論壇點擊“退出”,則轉(zhuǎn)向到事先設(shè)置好的應(yīng)用程序退出頁面(http://www.mywebsite.com/login.php?action=logout),并在登錄頁面的 URL 中加入?yún)?shù) forward(例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在退出后將用戶導(dǎo)向到指定的 URL。
- 應(yīng)用程序收到此請求后,清除自身 Cookie 或 Session,使得應(yīng)用程序自身處于非登錄狀態(tài)。
- 檢查是否提交了 forward 變量,如有,則意味著登錄請求可能是由論壇而來,將此變量傳遞到后面的請求中。如沒有,自行生成 forward 變量,使得論壇登錄后能夠跳轉(zhuǎn)回到應(yīng)用程序中。
- 通過 header('Location: http://www.myforums.com/api/passport.php?action=logout&forward=http://yyy&verify=zzz') 的方式,將退出請求傳遞到論壇進行處理。其中 forward 用于告知論壇 Passport API 完成自身操作后轉(zhuǎn)向到的 URL 地址,verify 用于驗證 forward 變量的有效性。forward、verify 格式與結(jié)構(gòu)將在后面進行說明。
- Discuz! Passport API 在接收到由應(yīng)用程序通過 header() 提交過來的請求后,進行如下操作:
- 根據(jù) verify 判斷 forward 變量是否合法,如合法則繼續(xù),否則終止。
- 清楚論壇的 Cookie 或 Session,使得論壇自身處于非登錄狀態(tài)。
- 根據(jù)應(yīng)用程序反饋的 forward 值,通過 header('Location: http://xxx') 的形式將頁面跳轉(zhuǎn)到 forward 變量指定的 URL。
- 至此,退出流程結(jié)束。
開啟通行證后的用戶注冊流程
posted on 2007-08-11 17:30
steady 閱讀(3296)
評論(3) 編輯 收藏 所屬分類:
Java