分析其主要原因是phpsso与ucenter通信成功后,XXX_ucenter_member表中的用户已经同步成功但是在XXX_common_member中并没有此用户,所以只要在xxx_common_member中插入此用户就可以了,所以修改discuz/api/uc.php下的synlogin函数就可以了,修改为
- functionsynlogin($get,$post){
- global$_G;
- if(!API_SYNLOGIN){
- returnAPI_RETURN_FORBIDDEN;
- }
- header('P3P:CP="CURaADMaDEVaPSAoPSDoOURBUSUNIPURINTDEMSTAPRECOMNAVOTCNOIDSPCOR"');
- $cookietime=31536000;
- $uid=intval($get['uid']);
- $query=DB::query("SELECTuid,username,passwordFROM".DB::table('common_member')."WHEREuid='$uid'");
- if($member=DB::fetch($query))
- {
- dsetcookie('auth',authcode("$member[password]\\t$member[uid]",'ENCODE'),$cookietime);
- }else
- {
- $username=$get['username'];
- $query=DB::query("SELECTuid,username,password,emailFROM".DB::table('ucenter_members')."WHEREusername='$username'");
- $member=DB::fetch($query);
- $password=$member['password'];
- $email=$member['email'];
- $ip=$_SERVER['REMOTE_ADDR'];
- $time=time();
- $userdata=array(
- 'uid'=>$uid,
- 'username'=>$username,
- 'password'=>$password,
- 'email'=>$email,
- 'adminid'=>0,
- 'groupid'=>10,
- 'regdate'=>$time,
- 'credits'=>0,
- 'timeoffset'=>9999
- );
- DB::insert('common_member',$userdata);
- $status_data=array(
- 'uid'=>$uid,
- 'regip'=>$ip,
- 'lastip'=>$ip,
- 'lastvisit'=>$time,
- 'lastactivity'=>$time,
- 'lastpost'=>0,
- 'lastsendmail'=>0
- );
- DB::insert('common_member_status',$status_data);
- DB::insert('common_member_profile',array('uid'=>$uid));
- DB::insert('common_member_field_forum',array('uid'=>$uid));
- DB::insert('common_member_field_home',array('uid'=>$uid));
- DB::insert('common_member_count',array('uid'=>$uid));
- DB::query('UPDATE'.DB::table('common_setting')."SETsvalue='$username'WHEREskey='lastmember'");
- $query=DB::query("SELECTuid,username,passwordFROM".DB::table('common_member')."WHEREuid='$uid'");
- if($member=DB::fetch($query))
- {
- dsetcookie('auth',authcode("$member[password]\\t$member[uid]",'ENCODE'),$cookietime);
- }
- }
- }
这样在phpcms中注册后去discuz中就可以不用激活就自动登录了