Discuz與Moodle實現同步登錄:

DiscuzMoodle實現同步登錄:


moodleucenter通信成功的基礎上繼續講如何實現discuzmoodle同步登錄:

主要是修改login/index.php


思路分析:

Moodle系統嵌套此discuz論壇,因此以moodle用戶表爲主,先用身份驗證插件authenticate_user_login驗證用戶名與密碼是否正確,不正確顯示登錄無效,停留在登錄頁面;如果有該用戶存在,則用ucenter接口驗證用戶名,則uc_user_login驗證,如果有該用戶,則設置cookie,開啓同步登錄uc_user_synlogin,如果沒有該用戶,則向ucenter用戶表插入該用戶信息的一條記錄,成功後還是設置cookie,開啓同步登錄。


以下是實現代碼:


在驗證處加入:


if (empty($errormsg)) {

//先判斷moodle用戶名、密碼是否正確

$user = authenticate_user_login($frm->username, $frm->password);

if($user){

list($uid, $username, $password, $email) =uc_user_login($_POST['username'], $_POST['password']);

if($username) {

//ucenter表有此用戶,設置Cookie,登錄成功,並通知其它應用同步登錄

setcookie('Mdl_auth',uc_authcode($uid."\t".$username, 'ENCODE'));

//生成同步登錄的代碼

$ucsynlogin =uc_user_synlogin($uid);

echo$ucsynlogin.'<br><a href="'.$_SERVER['PHP_SELF'].'"></a>';

}else{

//ucenter用戶表無此用戶,應在ucenter用戶名中插入該用戶,設置Cookie,顯示登錄成功,並通知其它應用同步登錄

$conn=@mysql_connect("localhost","root","root");

mysql_select_db("discuz");

mysql_query("set namesutf8");

$username=$_POST['username'];

$regip=$_SERVER['REMOTE_ADDR'];

$regdate=time();

srand((double)microtime()*1000000);//生成隨機數種子

$ychar="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";

$list=explode(",",$ychar);

for($i=0;$i<6;$i++){

$randnum=rand(0,35); // 10+26;

$salt.=$list[$randnum];

}

//echo $salt;

$password=md5(md5($_POST['password']).$salt);

$sql="insert intocdb_uc_members(username,password,regip,regdate,salt) values('$username','$password','$regip','$regdate','$salt')";

$res=mysql_query($sql);

setcookie('Mdl_auth',uc_authcode($uid."\t".$username, 'ENCODE'));

//生成同步登錄的代碼

$ucsynlogin = uc_user_synlogin($uid);

echo $ucsynlogin.'<br><ahref="'.$_SERVER['PHP_SELF'].'"></a>';

}

}

}


然後在api/uc.php修改一下synlogin方法:

function synlogin($get, $post) {

$uid = $get['uid'];

$username = $get['username'];

if(!API_SYNLOGIN) {

returnAPI_RETURN_FORBIDDEN;

}

/*

require_once$this->appdir.'./forumdata/cache/cache_settings.php';


$cookietime = 2592000;

$discuz_auth_key =md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);

header('P3P: CP="CURaADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSPCOR"');

$uid = intval($uid);

$query =$this->db->query("SELECT username, uid, password, secques FROM".$this->tablepre."members WHERE uid='$uid'");

if($member =$this->db->fetch_array($query)) {

_setcookie('sid','', -86400 * 365);

_setcookie('cookietime',$cookietime, 31536000);

_setcookie('auth',_authcode("$member[password]\t$member[secques]\t$member[uid]",'ENCODE', $discuz_auth_key), $cookietime);

} else {

_setcookie('cookietime',$cookietime, 31536000);

_setcookie('loginuser',$username, $cookietime);

_setcookie('activationauth',_authcode($username, 'ENCODE', $discuz_auth_key), $cookietime);

}

//以上註釋掉的代碼是discuz的登錄cookies

*/

header('P3P: CP="CURaADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSPCOR"');

header("Location:../login/index.php?username=$username&uid=$uid");//同步登錄

_setcookie('example_auth',_authcode($uid."\t".$username, 'ENCODE',UC_KEY), 86500);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章