分析其主要原因是phpsso与ucenter通信成功后,XXX_ucenter_member表中的用户已经同步成功但是在XXX_common_member中并没有此用户,所以只要在xxx_common_member中插入此用户就可以了,所以修改discuz/api/uc.php下的synlogin函数就可以了,修改为
PHP Code复制内容到剪贴板 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中就可以不用激活就自动登录了