在其他系统注册用户后,如何到discuz的时候自动激活

其实任何一个系统都一样,在A系统注册后,如何到B系统自动激活?其实很方便,修改一下每一个系统的uc.php中的synlogin方法即可,我这里以discuz 7为例写了一个简单的(我没有判断uid无效的情况,实际应用中需注意,但其实问题也不大,因为返回的值被你自己插入后也全是空,如果为了严谨,还是加上一个判断较好)

function synlogin($get, $post) {
$uid = $get['uid'];
$username = $get['username'];
if(!API_SYNLOGIN) {
return API_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=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
$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 {
require_once $this->appdir.’./uc_client/client.php’;

list($tmp['uid'], $tmp['username'], $tmp['email']) = uc_get_user($uid,1);
$password = md5(time());
$onlineip = $_SERVER['REMOTE_ADDR'];
$timestamp = time();
$secques = ”;
$this->db->query(“INSERT INTO “.$this->tablepre.”members (uid, username, password, secques, adminid, groupid, regip, regdate, lastvisit, lastactivity, posts, credits, email, showemail, timeoffset, pmsound, invisible, newsletter) VALUES (‘$uid’, ‘$username’, ‘$password’, ”, ’0′, ’10′, ‘$onlineip’, ‘$timestamp’, ‘$timestamp’, ‘$timestamp’, ’0′, ’0′, ‘”.$tmp['email'].”‘, ’0′, ’9999′, ’1′, ’0′, ’1′)”);
$this->db->query(“REPLACE INTO “.$this->tablepre.”memberfields (uid) VALUES (‘$uid’)”);
_setcookie(‘sid’, ”, -86400 * 365);
_setcookie(‘cookietime’, $cookietime, 31536000);
_setcookie(‘auth’, _authcode(“$password\t$secques\t$uid”, ‘ENCODE’, $discuz_auth_key), $cookietime);
}
}

这其中有几个需要注意一下,新用户在discuz中涉及到两个表:member和memberfield。然后member的表字段,请尽量与我上面写的一致,否则有可能还需要让你手工激活。(至于为什么,我忘了,这是一年前的代码了。)