discuz部分修改
0
discuz和Java系统整合,但是麻烦的事情来了,Java系统没有username
,统一使用邮箱的,但是discuz必须要用户名而且邮箱不符合用户名的规范,现在正在解决中。
注意:
以下代码都是站长自己修改,由于站长不懂PHP,只是照葫芦画瓢,所以可能存在一些问题,请谨慎使用。
另外网站使用了邮箱登录注册,所以改了很多地方的$username
为
首先解决接口使用邮箱登录,其实有注释很简单就可以看懂的,但是最重要的一个参数$isuid
注释简直无情,最后看了源码:
$this->init_input();
$isuid = $this->input('isuid');
$username = $this->input('username');
$password = $this->input('password');
$checkques = $this->input('checkques');
$questionid = $this->input('questionid');
$answer = $this->input('answer');
if($isuid == 1) {
$user = $_ENV['user']->get_user_by_uid($username);
} elseif($isuid == 2) {
$user = $_ENV['user']->get_user_by_email($username);
} else {
$user = $_ENV['user']->get_user_by_username($username);
}
同步登录的时候必须要到discuz登陆一次才能激活,解决办法,修改api/uc.php
:
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
}
修改为:
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
} else {
$username = $get['username'];
$user_uc = DB::fetch_first("select uid, username, email from ".DB::table("ucenter_members")." where email = '".$username."'");
if($user_uc && $user_uc['uid'] > 0) {
$init_arr = array(0, 0, 0, 0, 0, 0, 0, 0, 0);
$groupid = $this->setting['regverify'] ? 8 : $this->setting['newusergroupid'];
C::t('common_member')->insert($user_uc['uid'], $user_uc['username'], md5(random(10)), $user_uc['email'], $_G['clientip'], $groupid, $init_arr);
$member = getuserbyuid($user_uc['uid'], 1);
if($member) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
}
}
}
如果是登录时discuz不存在用户时,调用注册方法注册进去。
修改密码(这里吐槽一下,修改密码不是立即同步的,所以存在一些问题),同步搜索$_ENV['note']->add('updatepw'
,然后把所有的都修改:
$_ENV['note']->add('updatepw', 'username='.$email.'&password='.urlencode($newpw));
同步邮箱登录的地方修改,位置自己搜索一下,另外还有的加密方式不同也修改这里:
$synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['email'].'&uid='.$this->user['uid'].'&password='.$this->user['password']."&salt=".$this->user['salt']."&time=".$this->time, 'ENCODE', $app['authkey'])).'"></script>';
最后感觉ucenter这个安全存在一些问题的,如果有人知道你的appkey
,那么基本上都可以登录了,登录这些都是没有判断用户的密码的,通过验证,直接用ID取出用户信息的,所以可以自己加一下密码验证。