你现在的位置:首页 > PHP网站建设知识库 > Discuz > 正文

discuz用户同步登录

discuz论坛的程序可读性不好,晕晕的.在discuz开发中,为了整合论坛和网站数据,又不得不看.
还好,用户登录这里通过一个小小的方法可以实现和论坛同步了.可以不用passport接口.
这是我整理的数据,仅供参考.

登录传两值过来就行(username和password);
<?php
session_start();
define('NOROBOT', TRUE);
define('CURSCRIPT', 'logging');

require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./include/misc.func.php';

if($action == 'login') {
    $field = $loginfield == 'uid' ? 'uid' : 'username';

    //get secure code checking status (pos. -2)
    $seccodecheck = substr(sprintf('%05b', $seccodestatus), -2, 1);

    if($seccodecheck && $seccodedata['loginfailedcount']) {
        $seccodecheck = $db->result($db->query("SELECT count(*) FROM {$tablepre}failedlogins WHERE ip='$onlineip' AND count>='$seccodedata[loginfailedcount]' AND $timestamp-lastupdate<=900"), 0);
    }

        $discuz_uid = 0;
        $discuz_user = $discuz_pw = $discuz_secques = $md5_password = '';
        $member = array();

        $loginperm = logincheck();
        if(!$loginperm) {
            showmessage('login_strike');
        }

        $secques = quescrypt($questionid, $answer);

        if(isset($loginauth)) {
            $field = 'username';
            $password = 'VERIFIED';
            list($username, $md5_password) = daddslashes(explode("/t", authcode($loginauth, 'DECODE')), 1);
        } else {
            $md5_password = md5($password);
            $password = preg_replace("/^(.{".round(strlen($password) / 4)."})(.+?)(.{".round(strlen($password) / 6)."})$/s", "//1***//3", $password);
        }

        $query = $db->query("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
                    m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
                    FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
                    WHERE m.$field='$username'");

        $member = $db->fetch_array($query);
        
        //判断登录是否正确
        if($member['password']!=$md5_password){
        echo "您输入的用户名或密码错误!";
        exit();
        }
        //通过就执行下边的程序
                extract($member);

                $discuz_userss = $discuz_user;
                $discuz_user = addslashes($discuz_user);

                if(($allowinvisible && $loginmode == 'invisible') || $loginmode == 'normal') {
                    $db->query("UPDATE {$tablepre}members SET invisible='".($loginmode == 'invisible' ? 1 : 0)."' WHERE uid='$member[discuz_uid]'", 'UNBUFFERED');
                }

                $styleid = intval(empty($_POST['styleid']) ? ($styleidmem ? $styleidmem :
                        $_DCACHE['settings']['styleid']) : $_POST['styleid']);

                $cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime'] :
                        ($_DCOOKIE['cookietime'] ? $_DCOOKIE['cookietime'] : 0));

                dsetcookie('cookietime', $cookietime, 31536000);
                dsetcookie('auth', authcode("$discuz_pw/t$discuz_secques/t$discuz_uid", 'ENCODE'), $cookietime);

                $sessionexists = 0;
                
                 updatesession();//更新论坛USERPASS数据
             
                 echo "{'action':'ture'}";//这里是您要输出的数据
                 print_r($_DSESSION);
                 echo $discuz_userss;
            
}
?>