隨筆 - 170  文章 - 536  trackbacks - 0
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          我參與的團隊

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 415111
          • 排名 - 135

          最新評論

          閱讀排行榜

          因為有一個 Struts2 網站發布,需要整合一個論壇來使用,公司的一個項目過去曾經整合過一個英文論壇,但似乎不能滿足我們的需求,需要找一個成熟穩定的中文論壇,與我們的系統結合。

          最終選擇了 Discuz 作為我們的論壇系統,主要是因為它提供了一套可用的 Passport API,來直接與我們現有系統進行整合。

          下面摘錄 Discuz 文檔中的內容來說明整合原理,隨后的幾篇中,將詳細描述具體的整合過程。

          假設已設置如下變量或參數

          • 掛接 Discuz! Passport 的應用程序假設為一套 PHP 語言編寫的 CMS 系統
          • Discuz! 的 URL 為 http://www.myforums.com
          • 應用程序的 URL 為 http://www.mywebsite.com
          • 應用程序的注冊頁面為 http://www.mywebsite.com/register.php
          • 應用程序的登錄頁面為 http://www.mywebsite.com/login.php?action=login
          • 應用程序的退出頁面為 http://www.mywebsite.com/login.php?action=logout

          開啟通行證后的用戶登錄流程

          • 如果用戶在論壇點擊“登錄”,則轉向到事先設置好的應用程序登錄頁面(http://www.mywebsite.com/login.php?action=login),并在登錄頁面的 URL 中加入參數 forward(加入 forward 后的鏈接例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在登錄后將用戶導向到指定的 URL。

          • 應用程序收到此請求后,按照慣例生成表單,并增加一個表單變量,將 GET 方式傳遞過來的 forward 參數通過表單進行傳遞。

          • 用戶在應用程序的表單中填寫登錄信息,并提交到應用程序的登錄驗證程序。應用程序驗證用戶提交的用戶名和密碼的合法性:

            • 如果不通過:提示用戶名密碼錯誤,要求其返回上一頁重新填寫。

            • 如果通過,需要進行如下操作:

              • 設置自身 Cookie 或 Session,使得應用程序自身處于登錄狀態。

              • 檢查表單中是否提交了 forward 變量,如有,則意味著登錄請求可能是由論壇而來,將此變量傳遞到后面的請求中。如沒有,自行生成 forward 變量,使得論壇登錄后能夠跳轉回到應用程序中。

              • 通過 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,將登錄請求傳遞到論壇進行處理。其中 auth 用來將用戶信息與資料以特定的格式,加密傳遞給論壇,forward 用于告知論壇 Passport API 完成自身操作后轉向到的 URL 地址,verify 用于驗證前面兩個變量的有效性。auth、forward、verify 格式與結構將在后面進行說明。


          • Discuz! Passport API 在接收到由應用程序通過 header() 提交過來的請求后,進行如下操作:

            • 根據 verify 判斷 auth 和 forward 變量是否合法,如合法則繼續,否則終止。

            • 將 auth 根據既定算法解密,并還原成數組,數組的內容與格式將在后面進行說明。根據數組中的內容,檢查此用戶是否存在。如存在,則根據上述數組中的內容 UPDATE 論壇中相應的用戶資料。如不存在,則使用數組中的信息 INSERT 到論壇用戶資料表中。

            • 論壇設置 Cookie 或 Session,使得論壇自身處于登錄狀態。

            • 根據應用程序反饋的 forward 值,通過 header('Location: http://xxx') 的形式將頁面跳轉到 forward 變量指定的 URL。


          • 至此,登錄流程結束

          開啟通行證后的用戶退出流程

          • 如果用戶在論壇點擊“退出”,則轉向到事先設置好的應用程序退出頁面(http://www.mywebsite.com/login.php?action=logout),并在登錄頁面的 URL 中加入參數 forward(例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在退出后將用戶導向到指定的 URL。

          • 應用程序收到此請求后,清除自身 Cookie 或 Session,使得應用程序自身處于非登錄狀態。

          • 檢查是否提交了 forward 變量,如有,則意味著登錄請求可能是由論壇而來,將此變量傳遞到后面的請求中。如沒有,自行生成 forward 變量,使得論壇登錄后能夠跳轉回到應用程序中

          • 通過 header('Location: http://www.myforums.com/api/passport.php?action=logout&forward=http://yyy&verify=zzz') 的方式,將退出請求傳遞到論壇進行處理。其中 forward 用于告知論壇 Passport API 完成自身操作后轉向到的 URL 地址,verify 用于驗證 forward 變量的有效性。forward、verify 格式與結構將在后面進行說明

          • Discuz! Passport API 在接收到由應用程序通過 header() 提交過來的請求后,進行如下操作:

            • 根據 verify 判斷 forward 變量是否合法,如合法則繼續,否則終止。

            • 清楚論壇的 Cookie 或 Session,使得論壇自身處于非登錄狀態。

            • 根據應用程序反饋的 forward 值,通過 header('Location: http://xxx') 的形式將頁面跳轉到 forward 變量指定的 URL。


          • 至此,退出流程結束。

          開啟通行證后的用戶注冊流程

          • 如果用戶在論壇點擊“注冊”,則轉向到事先設置好的應用程序注冊頁面(http://www.mywebsite.com/register.php),并在注冊頁面的 URL 中加入參數 forward(例如 http://www.mywebsite.com/register.php?forward=http://www.myforums.com/index.php),用于在注冊后將用戶導向到指定的 URL

          • 應用程序收到此請求后,按照慣例生成表單,并增加一個表單變量,將 GET 方式傳遞過來的 forward 參數通過表單進行傳遞

          • 用戶在應用程序的表單中填寫注冊信息,并提交到應用程序的注冊驗證程序。應用程序驗證用戶提交信息的完整性和合法性:

            • 如果不通過:提示其問題所在,要求其返回上一頁重新填寫

            • 如果通過,需要進行如下操作:

              • 將用戶資料插入到應用程序自身用戶數據庫中

              • 設置自身 Cookie 或 Session,使得應用程序自身處于登錄狀態

              • 檢查表單中是否提交了 forward 變量,如有,則意味著注冊請求可能是由論壇而來,將此變量傳遞到后面的請求中。如沒有,自行生成 forward 變量,使得論壇注冊后能夠跳轉回到應用程序中

              • 通過 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,將注冊請求傳遞到論壇進行處理。其中 auth 用來將用戶信息與資料以特定的格式,加密傳遞給論壇,forward 用于告知論壇 Passport API 完成自身操作后轉向到的 URL 地址,verify 用于驗證前面兩個變量的有效性。auth、forward、verify 格式與結構將在后面進行說明


          • Discuz! Passport API 在接收到由應用程序通過 header() 提交過來的請求后,進行如下操作:

            • 根據 verify 判斷 auth 和 forward 變量是否合法,如合法則繼續,否則終止

            • 將 auth 根據既定算法解密,并還原成數組,數組的內容與格式將在后面進行說明。根據數組中的內容,檢查此用戶是否存在。如存在,則根據上述數組中的內容 UPDATE 論壇中相應的用戶資料。如不存在,則使用數組中的信息 INSERT 到論壇用戶資料表中

            • 論壇設置 Cookie 或 Session,使得論壇自身處于登錄狀態

            • 根據應用程序反饋的 forward 值,通過 header('Location: http://xxx') 的形式將頁面跳轉到 forward 變量指定的 URL


          • 至此,注冊流程結束

            本部分中,加下劃線顯示的部分,是需要對您的應用程序進行更改的部分,事實上,這部分更改會非常容易和方便。

          posted on 2007-08-11 17:30 steady 閱讀(3296) 評論(3)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: Struts2 整合 Discuz 論壇 (1) 2008-09-05 16:59 jackyrong
          有第2部分的文么?  回復  更多評論
            
          # re: Struts2 整合 Discuz 論壇 (1) 2008-11-12 10:19 thk
          這只是官方的Discuz! Passport copy來的啊
          請問博主有續集講解嗎?  回復  更多評論
            
          # re: Struts2 整合 Discuz 論壇 (1) 2011-03-27 14:09 openjweb
          我最關系的是這句:

          將 auth 根據既定算法解密

          請問怎么解密?uc.php中,dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);后,得到cookie值還原不出來用戶名和密碼。  回復  更多評論
            
          主站蜘蛛池模板: 将乐县| 章丘市| 涞源县| 项城市| 承德县| 定安县| 多伦县| 农安县| 华阴市| 昌江| 中阳县| 灵石县| 大港区| 屯门区| 民丰县| 大关县| 潍坊市| 蛟河市| 麦盖提县| 泸西县| 南川市| 兴和县| 永川市| 法库县| 都兰县| 永新县| 晴隆县| 开鲁县| 惠东县| 油尖旺区| 浏阳市| 南木林县| 安新县| 宁都县| 民县| 惠州市| 平远县| 东方市| 贵港市| 大冶市| 商水县|