PHP  網頁設計 技巧

修改discuz,uchome,ucenter兼容自己開發既通行證

最近稍有接觸,修改其中既部分代碼,就貢獻其中既關鍵部分啦

目前discuz既會員註冊係在discuz自己既體系中完成,然後post(或者mysql直接操作,此處以post代稱)到ucenter既數據庫,其中會員密碼係md5(md5(真實密碼)+首次隨機字符sult),memberid由ucenter產生。然後得到改值,保存在discuz。

如果係自己已有通行證系統,產生id,保存密碼呢部分就在自己既系統完成,然後送回來到ucenter,然後保存到dizcuz。

在uc_center/client.php中加入代碼

//cjjer
function uc_user_registerCjjer($uid,$username, $password, $email, $questionid = '', $answer = '') {

    return call_user_func(UC_API_FUNC, 'user', 'register', array('uid'=>$uid,'username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer));
}
function uc_user_updateCjjer($uid,$username, $password, $email, $questionid = '', $answer = '') {
    return call_user_func(UC_API_FUNC, 'user', 'myupdate', array('uid'=>$uid,'username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer));
}

註冊的時候就用uc_user_registerCjjer。

在contol/user.php加入代碼:


    //    rewrite by cjjer

    function onregister() {
        $this->init_input();
        $username = $this->input('username');
        $myuserid = intval($this->input('uid'));
        $password =  $this->input('password');
        $email = $this->input('email');
        $questionid = $this->input('questionid');
        $answer = $this->input('answer');

        if(    (($status = $this->_check_username($username)) < 0) ||
            (($status = $this->_check_email($email)) < 0)||
            ($status = $_ENV['user']->get_user_by_uid($myuserid))
            ) {
            //開始更新會員資料
            $_ENV['user']->update_user($myuserid,$username, $password, $email, $myuserid, $questionid, $answer);
            return $myuserid;
        }else{
            $uid = $_ENV['user']->add_user($username, $password, $email, $myuserid, $questionid, $answer);
        }
        return $uid;
    }

    function onmyupdate() {
        $this->init_input();
        $username = $this->input('username');
        $myuserid = intval($this->input('uid'));
        $password =  $this->input('password');
        $email = $this->input('email');
        $questionid = $this->input('questionid');
        $answer = $this->input('answer');

        $status = $_ENV['user']->get_user_by_uid($myuserid);
        if(!$status) {
            return -1;
        }
        $uid = $_ENV['user']->update_user($myuserid,$username, $password, $email, $myuserid, $questionid, $answer);
        return $uid;
    }


然後在model/user.php加入

    function update_user($user_id,$username, $password, $email, $uid = 0, $questionid = '', $answer = '') {
        $salt = substr(uniqid(rand()), -6);
        $password = md5(md5($password).$salt);
        if(! $uid)return  0;
        $sqladd = $uid ? "uid='".intval($uid)."'," : '';
        $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
        //不更新密碼,,salt='$salt'
        $this->db->query("update ".UC_DBTABLEPRE."members SET   username='$username', email='$email' where uid='$uid'");

        return $user_id;
    }

修改其中的add_user方法為:

    function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '') {
        $salt = substr(uniqid(rand()), -6);
        $password = md5(md5($password).$salt);
        $sqladd = $uid ? "uid='".intval($uid)."'," : '';
        $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
        $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='".$this->base->onlineip."', regdate='".$this->base->time."', salt='$salt'");
        $uid = $this->db->insert_id();
        $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
        return $uid;
    }


咁樣在uchome註冊既用戶就能自動映射到discuz,唔需要激活。直接更新。


其中discuz系統既關鍵部分在include/common.inc.php裡面既140行左右的驗證用戶登錄的。呢度切入即可。就係在產生$sid=$discuz_pw= $discuz_secques= $discuz_uid這幾個變量既時候。包含自己既通行證,直接可以打通。


uchome在source/function_common.php這個function checkauth() 函數裡面直接切入就可以了
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 qiuqiu 的頭像
    qiuqiu

    SEO網頁設計

    qiuqiu 發表在 痞客邦 留言(0) 人氣()