您當前的位置:首頁 > 云計算 > IDC情報 > 建站程序系統

[轉]用Ucenter完成Discuz與Drupal的整合|同步登陸篇

順義站長資源 2010-03-22 16:19:01

       最近由于項目的需要研究了一下康勝的Ucenter這個產品,并動手把Discuz和Drupal整合了一下,實現了用戶數據以及登陸登出的一致。用PHP實現單點登陸來說,康勝的方案算是一個不錯的選擇,其中有些想法還是蠻有新意的,值得學習下。先來說說Ucenter實現多個應用同步登陸的原理:

       Ucenter里面每個應用都有自己唯一的應用ID和通信密匙,用戶在其中的一個應用中登陸時,先用uc_user_login去檢查該用戶是否在Ucenter的用戶中的密碼和用戶名是否正確,如果正確則回用戶的uidemail等信息,如果返回的uid大于0則成功登陸Ucenter,菩鏇的各個狀態見開發文檔,然后調用uc_user_syn_login($uid)去實現同步登陸,該函數會生成一段js代碼,你在完成登陸的流程后必須把這段代碼輸出到頁面中,以便達到Ucenter通知各個允許同步登陸的應用完成登陸,這段js代碼就是去加載一個js 的腳本,這個腳本就是各個應用的api下的uc.php中同步登陸接口的實現,這個腳本根據url參數中帶一串加密(根據你在后臺自己填寫的密匙生成)過后的數據,解密后這個數據中帶有用戶登陸時輸入的用戶名和密碼等參數,這個時候會生成一個uc_note的對象,去調用他synlogin的方法,并把用戶名和密碼傳過去完成其他各個應用的登陸。這樣就實現了同步登陸。
       $uc_note = new uc_note();
       exit($uc_note->$get['action']($get $post));

 

       $uid = $get['uid'];
       $username = $get['username'];
       if(!API_SYNLOGIN) {
       return API_RETURN_FORBIDDEN;
       }
       //note 同步登錄API 接口
       登陸你自己的應用程序的代碼 ,一般是寫Session 之類的操作啊。Discuz中如讓果在自己應用的數據庫中檢查不到該用戶名則生成一個loginuser的cookie以便用戶在訪問discuz時提示用戶去激活,從而把用戶信息數據記錄到Discuz自己的用戶中表
同步登陸的關鍵點就在于生成的那段js代碼,這個想法還是很有才的。

       同步登陸過程出可能出現的問題:
       可能由于歷史數據的原因,各個應用整合前后用戶在Ucenter中存在了,但是在其他應用中不存在,這個時候實現登陸時你會發現在uc.php總的synlocugin這個函數里面沒法實現登陸,這個問題我遇見了,于是我想Discuz不也用的這個東東嗎?我就看了下Discuz的代碼中是如何解決這個問題的,結果我發現當在ucenter中用戶存在,但是在Discuz中用戶不存在時就生成一個cookie當用戶去訪問應用時如果檢測到這個cookie就讓用戶自己去激活一下,在激活的同時把用戶信息記錄到自己應用的用戶數據庫表中,或者用戶登陸時沒有相應的用戶名則也要用戶激活以便把用戶數據記錄下來。
       不過后來我想了下,稍微修改下這個代碼貌似就可以不用激活了,要是出現這種情況直接直接把用戶數據寫入自己應用的用戶數據庫中,用戶在自己應用這邊登陸時如果能夠成功登陸上Ucenter卻檢查到在自己的應用數據庫表中不存在該用戶時,也直接把用戶名和密碼等數據寫入到數據庫中也可以解決該問題。

 

Contact lanisky

深圳市湛藍信息產業有限公司

地址:深圳市龍華區民治街道華僑新村
[email protected] / 0755-86501200

廉江市湛藍科技有限公司

廣東省廉江市良垌鎮平田濟村 / 0759-6905386

經營資質

營業執照  企業信用信息  粵ICP備15114633號
中央網信辦舉報中心  廣東省通管局  深圳舉報中心

首頁 | 湛藍公司 | 關于我們 | 官方新聞 | 資料中心 | 人力資源 | 聯系我們 | 網站條款 | 友情鏈接 | 會員中心

©2015- Lanisky All rights reserved.

lanisky                  更多>
亿客隆彩票