首先在自己的主机搭载CAS认证系统,前人的blog把步骤写的已经很详细了,不做赘述,可以参考下面的三篇文章:
http://www.cnblogs.com/arix04/archive/2009/08/06/1540103.html
http://blog.csdn.net/id19870510/article/details/5653177
http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
然后搭载Discuz! X2.5 平台,这个比较简单,我用的是wamp集成服务器,直接next、next...就可以了。
之后配置PHP的CAS,先下载客户端: http://downloads.jasig.org/cas-clients/php/ 我下载的是1.3.1,然后将解压后的CAS文件夹和CAS.php复制到
你所对应的工程下,不过可以先建立一个案例测试一下。先建立了一个casPHP工程文件,将两个文件copy过去后,新建了一个example.php 作为登录客户端,代码如下:
1 <?php 2 // 3 // phpCAS simple client 4 // 5 6 // import phpCAS lib 7 include_once('CAS.php');//注意这个 8 9 phpCAS::setDebug(); 10 11 // initialize phpCAS 12 phpCAS::client(CAS_VERSION_2_0,'www.woniu.com',8443,'cas'); 13 14 // no SSL validation for the CAS server 15 phpCAS::setNoCasServerValidation(); 16 17 // force CAS authentication 18 phpCAS::forceAuthentication(); 19 20 // at this step, the user has been authenticated by the CAS server 21 // and the user's login name can be read with phpCAS::getUser(). 22 23 // logout if desired 24 if (isset($_REQUEST['logout'])) { 25 phpCAS::logout(); 26 } 27 28 // for this test, simply print that the authentication was successfull 29 ?> 30 <html> 31 <head> 32 <title>phpCAS simple client</title> 33 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 34 </head> 35 <body> 36 <h1>Successfull Authentication!</h1> 37 <p>the user's login is <b><?php echo phpCAS::getUser(); ?></b>.</p> 38 <p>phpCAS version is <b><?php echo phpCAS::getVersion(); ?></b>.</p> 39 //用来测试的java客户端 40 <p><a href="http://localhost:8080/Temp/servlet/helloworld">去java客户端测试</a></p> 41 <p><a href="?logout=">Logout</a></p> 42 </body> 43 </html>
访问 http://localhost/casPHP/example.php
也许你会看到类似这样的错误提示:
Fatal error: Call to undefined function curl_init() in D:\javasoft\PHP\wamp\www\CAS\Request\CurlRequest.php on line 64它说curl_init()
这个方法没被定义。
;extension=php_curl.dll前面的分号去掉就可以了。至此,PHP的CAS就配置好了。
Discuz! X2.5中操作也差不多。首先将CAS文件和CAS.php拷贝过去。我的工程名为Discuz2.5,所以拷贝到Discuz2.5目录下。
然后要做的就是修改工程中的三个文件,由于我对PHP也不是很熟悉,所以这里就直接给出代码,请自行修改。如果有懂PHP的欢迎对其作出补充完善。
首先是修改文件 Discuz2.5\upload\source\class\class_member.php ,可以直接替换
1 <?php 2 3 /** 4 * [Discuz!] (C)2001-2099 Comsenz Inc. 5 * This is NOT a freeware, use is subject to license terms 6 * 7 * $Id: class_member.php 30465 2012-05-30 04:10:03Z zhengqingpeng $ 8 */ 9 10 if(!defined('IN_DISCUZ')) { 11 exit('Access Denied'); 12 } 13 14 class logging_ctl { 15 16 function logging_ctl() { 17 require_once libfile('function/misc'); 18 loaducenter(); 19 } 20 21 function logging_more($questionexist) { 22 global $_G; 23 if(empty($_GET['lssubmit'])) { 24 return; 25 } 26 $auth = authcode($_GET['username']."\t".$_GET['password']."\t".($questionexist ? 1 : 0), 'ENCODE'); 27 $js = '<script type="text/javascript">showWindow(\'login\', \'member.php?mod=logging&action=login&auth='.rawurlencode($auth).'&referer='.rawurlencode(dreferer()).(!empty($_GET['cookietime']) ? '&cookietime=1' : '').'\')</script>'; 28 showmessage('location_login', '', array('type' => 1), array('extrajs' => $js)); 29 } 30 31 function on_login() { 32 global $_G; 33 if($_G['uid']) { 34 $referer = dreferer(); 35 $ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : ''; 36 $param = array('username' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['member']['uid']); 37 showmessage('login_succeed', $referer ? $referer : './', $param, array('showdialog' => 1, 'locationtime' => true, 'extrajs' => $ucsynlogin)); 38 } 39 40 $from_connect = $this->setting['connect']['allow'] && !empty($_GET['from']) ? 1 : 0; 41 $seccodecheck = $from_connect ? false : $this->setting['seccodestatus'] & 2; 42 $seccodestatus = !empty($_GET['lssubmit']) ? false : $seccodecheck; 43 $invite = getinvite(); 44 45 if(1==2) { 46 47 $auth = ''; 48 $username = !empty($_G['cookie']['loginuser']) ? dhtmlspecialchars($_G['cookie']['loginuser']) : ''; 49 50 if(!empty($_GET['auth'])) { 51 list($username, $password, $questionexist) = explode("\t", authcode($_GET['auth'], 'DECODE')); 52 $username = dhtmlspecialchars($username); 53 if($username && $password) { 54 $auth = dhtmlspecialchars($_GET['auth']); 55 } else { 56 $auth = ''; 57 } 58 } 59 60 $cookietimecheck = !empty($_G['cookie']['cookietime']) || !empty($_GET['cookietime']) ? 'checked="checked"' : ''; 61 62 if($seccodecheck) { 63 $seccode = random(6, 1) + $seccode{0} * 1000000; 64 } 65 66 if($this->extrafile && file_exists($this->extrafile)) { 67 require_once $this->extrafile; 68 } 69 70 $navtitle = lang('core', 'title_login'); 71 include template($this->template); 72 73 } else { 74 75 if(!empty($_GET['auth'])) { 76 list($_GET['username'], $_GET['password']) = daddslashes(explode("\t", authcode($_GET['auth'], 'DECODE'))); 77 } 78 79 80 if($_GET['fastloginfield']) { 81 $_GET['loginfield'] = $_GET['fastloginfield']; 82 } 83 $_G['uid'] = $_G['member']['uid'] = 0; 84 $_G['username'] = $_G['member']['username'] = $_G['member']['password'] = ''; 85 86 //================================================ 87 define('CAS_ENABLE', true); 88 define('CAS_SERVER_HOSTNAME', "www.woniu.com"); 89 define('CAS_SERVER_PORT', 8443); 90 define('CAS_SERVER_APP_NAME', "cas"); 91 92 93 require_once './CAS.php'; 94 require_once './CAS/Client.php'; 95 require_once './CAS/Proxychain/AllowedList.php'; 96 require_once './CAs/Request/RequestInterface.php'; 97 require_once './CAs/Request/AbstractRequest.php'; 98 require_once './CAS/Request/CurlRequest.php'; 99 100 101 102 103 phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME); 104 //不使用SSL服务校验 105 phpCAS::setNoCasServerValidation(); 106 phpCAS::handleLogoutRequests(); 107 phpCAS::forceAuthentication(); 108 109 110 $auth1 = phpCAS::checkAuthentication(); 111 $cas=''; 112 113 114 if($auth1){ 115 $cas = phpCAS::getUser(); 116 117 }else{ 118 showmessage('尚未登录,<a href="#" onclick="return gocas();">前去登录</a>'); 119 } 120 121 122 $_GET['username']=$cas; 123 // $_GET['password']=$username; 124 $result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], $this->setting['autoidselect'] ? 'auto' : $_GET['loginfield'], $_G['clientip']); 125 $uid = $result['ucresult']['uid']; 126 127 if(!empty($_GET['lssubmit']) && ($result['ucresult']['uid'] == -3 || $seccodecheck && $result['status'] > 0)) { 128 $_GET['username'] = $result['ucresult']['username']; 129 $this->logging_more($result['ucresult']['uid'] == -3); 130 } 131 132 if($result['status'] == -1) { 133 if(!$this->setting['fastactivation']) { 134 $auth = authcode($result['ucresult']['username']."\t".FORMHASH, 'ENCODE'); 135 showmessage('location_activation', 'member.php?mod='.$this->setting['regname'].'&action=activation&auth='.rawurlencode($auth).'&referer='.rawurlencode(dreferer()), array(), array('location' => true)); 136 } else { 137 $init_arr = explode(',', $this->setting['initcredits']); 138 $groupid = $this->setting['regverify'] ? 8 : $this->setting['newusergroupid']; 139 140 C::t('common_member')->insert($uid, $result['ucresult']['username'], md5(random(10)), $result['ucresult']['email'], $_G['clientip'], $groupid, $init_arr); 141 $result['member'] = getuserbyuid($uid); 142 $result['status'] = 1; 143 } 144 } 145 146 if($result['status'] > 0) { 147 148 if($this->extrafile && file_exists($this->extrafile)) { 149 require_once $this->extrafile; 150 } 151 152 setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0); 153 checkfollowfeed(); 154 155 C::t('common_member_status')->update($_G['uid'], array('lastip' => $_G['clientip'], 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP)); 156 $ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : ''; 157 158 if($invite['id']) { 159 $result = C::t('common_invite')->count_by_uid_fuid($invite['uid'], $uid); 160 if(!$result) { 161 C::t('common_invite')->update($invite['id'], array('fuid'=>$uid, 'fusername'=>$_G['username'])); 162 updatestat('invite'); 163 } else { 164 $invite = array(); 165 } 166 } 167 if($invite['uid']) { 168 require_once libfile('function/friend'); 169 friend_make($invite['uid'], $invite['username'], false); 170 dsetcookie('invite_auth', ''); 171 if($invite['appid']) { 172 updatestat('appinvite'); 173 } 174 } 175 176 $param = array( 177 'username' => $result['ucresult']['username'], 178 'usergroup' => $_G['group']['grouptitle'], 179 'uid' => $_G['member']['uid'], 180 'groupid' => $_G['groupid'], 181 'syn' => $ucsynlogin ? 1 : 0 182 ); 183 184 $extra = array( 185 'showdialog' => true, 186 'locationtime' => true, 187 'extrajs' => $ucsynlogin 188 ); 189 190 $loginmessage = $_G['groupid'] == 8 ? 'login_succeed_inactive_member' : 'login_succeed'; 191 192 $location = $invite || $_G['groupid'] == 8 ? 'home.php?mod=space&do=home' : dreferer(); 193 if(empty($_GET['handlekey']) || !empty($_GET['lssubmit'])) { 194 if(defined('IN_MOBILE')) { 195 showmessage('location_login_succeed_mobile', $location, array('username' => $result['ucresult']['username']), array('location' => true)); 196 } else { 197 if(!empty($_GET['lssubmit'])) { 198 if(!$ucsynlogin) { 199 $extra['location'] = true; 200 } 201 showmessage($loginmessage, $location, $param, $extra); 202 } else { 203 $href = str_replace("'", "\'", $location); 204 showmessage('location_login_succeed', $location, array(), 205 array( 206 'showid' => 'succeedmessage', 207 'extrajs' => '<script type="text/javascript">'. 208 'setTimeout("window.location.href =\''.$href.'\';", 3000);'. 209 '$(\'succeedmessage_href\').href = \''.$href.'\';'. 210 '$(\'main_message\').style.display = \'none\';'. 211 '$(\'main_succeed\').style.display = \'\';'. 212 '$(\'succeedlocation\').innerHTML = \''.lang('message', $loginmessage, $param).'\';</script>'.$ucsynlogin, 213 'striptags' => false, 214 'showdialog' => true 215 ) 216 ); 217 } 218 } 219 } else { 220 showmessage($loginmessage, $location, $param, $extra); 221 } 222 } else { 223 $password = preg_replace("/^(.{".round(strlen($_GET['password']) / 4)."})(.+?)(.{".round(strlen($_GET['password']) / 6)."})$/s", "\\1***\\3", $_GET['password']); 224 $errorlog = dhtmlspecialchars( 225 TIMESTAMP."\t". 226 ($result['ucresult']['username'] ? $result['ucresult']['username'] : $_GET['username'])."\t". 227 $password."\t". 228 "Ques #".intval($_GET['questionid'])."\t". 229 $_G['clientip']); 230 writelog('illegallog', $errorlog); 231 loginfailed($_GET['username']); 232 $fmsg = $result['ucresult']['uid'] == '-3' ? (empty($_GET['questionid']) || $answer == '' ? 'login_question_empty' : 'login_question_invalid') : 'login_invalid'; 233 if($_G['member_loginperm'] > 1) { 234 showmessage($fmsg, '', array('loginperm' => $_G['member_loginperm'] - 1)); 235 } elseif($_G['member_loginperm'] == -1) { 236 showmessage('login_password_invalid'); 237 } else { 238 showmessage('login_strike'); 239 } 240 } 241 242 } 243 244 } 245 246 function on_logout() { 247 global $_G; 248 249 $ucsynlogout = $this->setting['allowsynlogin'] ? uc_user_synlogout() : ''; 250 251 if($_GET['formhash'] != $_G['formhash']) { 252 showmessage('logout_succeed', dreferer(), array('formhash' => FORMHASH, 'ucsynlogout' => $ucsynlogout)); 253 } 254 255 clearcookies(); 256 $_G['groupid'] = $_G['member']['groupid'] = 7; 257 $_G['uid'] = $_G['member']['uid'] = 0; 258 $_G['username'] = $_G['member']['username'] = $_G['member']['password'] = ''; 259 $_G['setting']['styleid'] = $this->setting['styleid']; 260 261 //================================================ 262 define('CAS_ENABLE', true); 263 define('CAS_SERVER_HOSTNAME', "www.woniu.com"); 264 define('CAS_SERVER_PORT', 8443); 265 define('CAS_SERVER_APP_NAME', "cas"); 266 267 268 require_once './CAS.php'; 269 require_once './CAS/Client.php'; 270 require_once './CAS/ProxyChain/AllowedList.php'; 271 require_once './CAs/Request/RequestInterface.php'; 272 require_once './CAs/Request/AbstractRequest.php'; 273 require_once './CAS/Request/CurlRequest.php'; 274 275 276 277 phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME); 278 279 280 $param=array("service"=>"http://localhost"); 281 282 phpCAS::logout($param); 283 284 285 showmessage('logout_succeed', dreferer(), array('formhash' => FORMHASH, 'ucsynlogout' => $ucsynlogout)); 286 } 287 288 } 289 290 class register_ctl { 291 292 var $showregisterform = 1; 293 294 function register_ctl() { 295 global $_G; 296 if($_G['setting']['bbclosed']) { 297 if(($_GET['action'] != 'activation' && !$_GET['activationauth']) || !$_G['setting']['closedallowactivation'] ) { 298 showmessage('register_disable', NULL, array(), array('login' => 1)); 299 } 300 } 301 302 loadcache(array('modreasons', 'stamptypeid', 'fields_required', 'fields_optional', 'fields_register', 'ipctrl')); 303 require_once libfile('function/misc'); 304 require_once libfile('function/profile'); 305 if(!function_exists('sendmail')) { 306 include libfile('function/mail'); 307 } 308 loaducenter(); 309 } 310 311 function on_register() { 312 global $_G; 313 314 $_GET['username'] = $_GET[''.$this->setting['reginput']['username']]; 315 $_GET['password'] = $_GET[''.$this->setting['reginput']['password']]; 316 $_GET['password2'] = $_GET[''.$this->setting['reginput']['password2']]; 317 $_GET['email'] = $_GET[''.$this->setting['reginput']['email']]; 318 319 if($_G['uid']) { 320 $ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : ''; 321 $url_forward = dreferer(); 322 if(strpos($url_forward, $this->setting['regname']) !== false) { 323 $url_forward = 'forum.php'; 324 } 325 showmessage('login_succeed', $url_forward ? $url_forward : './', array('username' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['uid']), array('extrajs' => $ucsynlogin)); 326 } elseif(!$this->setting['regclosed'] && (!$this->setting['regstatus'] || !$this->setting['ucactivation'])) { 327 if($_GET['action'] == 'activation' || $_GET['activationauth']) { 328 if(!$this->setting['ucactivation'] && !$this->setting['closedallowactivation']) { 329 showmessage('register_disable_activation'); 330 } 331 } elseif(!$this->setting['regstatus']) { 332 showmessage(!$this->setting['regclosemessage'] ? 'register_disable' : str_replace(array("\r", "\n"), '', $this->setting['regclosemessage'])); 333 } 334 } 335 336 $bbrules = & $this->setting['bbrules']; 337 $bbrulesforce = & $this->setting['bbrulesforce']; 338 $bbrulestxt = & $this->setting['bbrulestxt']; 339 $welcomemsg = & $this->setting['welcomemsg']; 340 $welcomemsgtitle = & $this->setting['welcomemsgtitle']; 341 $welcomemsgtxt = & $this->setting['welcomemsgtxt']; 342 $regname = $this->setting['regname']; 343 344 if($this->setting['regverify']) { 345 if($this->setting['areaverifywhite']) { 346 $location = $whitearea = ''; 347 $location = trim(convertip($_G['clientip'], "./")); 348 if($location) { 349 $whitearea = preg_quote(trim($this->setting['areaverifywhite']), '/'); 350 $whitearea = str_replace(array("\\*"), array('.*'), $whitearea); 351 $whitearea = '.*'.$whitearea.'.*'; 352 $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i'; 353 if(@preg_match($whitearea, $location)) { 354 $this->setting['regverify'] = 0; 355 } 356 } 357 } 358 359 if($_G['cache']['ipctrl']['ipverifywhite']) { 360 foreach(explode("\n", $_G['cache']['ipctrl']['ipverifywhite']) as $ctrlip) { 361 if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) { 362 $this->setting['regverify'] = 0; 363 break; 364 } 365 } 366 } 367 } 368 369 $invitestatus = false; 370 if($this->setting['regstatus'] == 2) { 371 if($this->setting['inviteconfig']['inviteareawhite']) { 372 $location = $whitearea = ''; 373 $location = trim(convertip($_G['clientip'], "./")); 374 if($location) { 375 $whitearea = preg_quote(trim($this->setting['inviteconfig']['inviteareawhite']), '/'); 376 $whitearea = str_replace(array("\\*"), array('.*'), $whitearea); 377 $whitearea = '.*'.$whitearea.'.*'; 378 $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i'; 379 if(@preg_match($whitearea, $location)) { 380 $invitestatus = true; 381 } 382 } 383 } 384 385 if($this->setting['inviteconfig']['inviteipwhite']) { 386 foreach(explode("\n", $this->setting['inviteconfig']['inviteipwhite']) as $ctrlip) { 387 if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) { 388 $invitestatus = true; 389 break; 390 } 391 } 392 } 393 } 394 395 $groupinfo = array(); 396 if($this->setting['regverify']) { 397 $groupinfo['groupid'] = 8; 398 } else { 399 $groupinfo['groupid'] = $this->setting['newusergroupid']; 400 } 401 402 $seccodecheck = $this->setting['seccodestatus'] & 1; 403 $secqaacheck = $this->setting['secqaa']['status'] & 1; 404 $fromuid = !empty($_G['cookie']['promotion']) && $this->setting['creditspolicy']['promotion_register'] ? intval($_G['cookie']['promotion']) : 0; 405 $username = isset($_GET['username']) ? $_GET['username'] : ''; 406 $bbrulehash = $bbrules ? substr(md5(FORMHASH), 0, 8) : ''; 407 $auth = $_GET['auth']; 408 409 if(!$invitestatus) { 410 $invite = getinvite(); 411 } 412 $sendurl = $this->setting['sendregisterurl'] ? true : false; 413 if($sendurl) { 414 if(!empty($_GET['hash'])) { 415 $hash = explode("\t", authcode($_GET['hash'], 'DECODE', $_G['config']['security']['authkey'])); 416 if(is_array($hash) && isemail($hash[0]) && TIMESTAMP - $hash[1] < 259200) { 417 $sendurl = false; 418 } 419 } 420 } 421 422 if(!submitcheck('regsubmit', 0, $seccodecheck, $secqaacheck)) { 423 424 if(!$sendurl) { 425 if($_GET['action'] == 'activation') { 426 $auth = explode("\t", authcode($auth, 'DECODE')); 427 if(FORMHASH != $auth[1]) { 428 showmessage('register_activation_invalid', 'member.php?mod=logging&action=login'); 429 } 430 $username = $auth[0]; 431 $activationauth = authcode("$auth[0]\t".FORMHASH, 'ENCODE'); 432 } 433 434 if($fromuid) { 435 $member = getuserbyuid($fromuid); 436 if(!empty($member)) { 437 $fromuser = dhtmlspecialchars($member['username']); 438 } else { 439 dsetcookie('promotion'); 440 } 441 } 442 443 $bbrulestxt = nl2br("\n$bbrulestxt\n\n"); 444 if($_GET['action'] == 'activation') { 445 $auth = dhtmlspecialchars($auth); 446 } 447 448 if($seccodecheck) { 449 $seccode = random(6, 1); 450 } 451 452 $username = dhtmlspecialchars($username); 453 454 $htmls = $settings = array(); 455 foreach($_G['cache']['fields_register'] as $field) { 456 $fieldid = $field['fieldid']; 457 $html = profile_setting($fieldid, array(), false, false, true); 458 if($html) { 459 $settings[$fieldid] = $_G['cache']['profilesetting'][$fieldid]; 460 $htmls[$fieldid] = $html; 461 } 462 } 463 464 $navtitle = $this->setting['reglinkname']; 465 466 if($this->extrafile && file_exists($this->extrafile)) { 467 require_once $this->extrafile; 468 } 469 } 470 $dreferer = dreferer(); 471 472 include template($this->template); 473 474 } else { 475 476 if($sendurl) { 477 checkemail($_GET['email']); 478 $hashstr = urlencode(authcode("$_GET[email]\t$_G[timestamp]", 'ENCODE', $_G['config']['security']['authkey'])); 479 $registerurl = "{$_G[siteurl]}member.php?mod=".$this->setting['regname']."&hash={$hashstr}&email={$_GET[email]}"; 480 $email_register_message = lang('email', 'email_register_message', array( 481 'bbname' => $this->setting['bbname'], 482 'siteurl' => $_G['siteurl'], 483 'url' => $registerurl 484 )); 485 if(!sendmail("$_GET[email] <$_GET[email]>", lang('email', 'email_register_subject'), $email_register_message)) { 486 runlog('sendmail', "$_GET[email] sendmail failed."); 487 } 488 showmessage('register_email_send_succeed', dreferer(), array('bbname' => $this->setting['bbname']), array('showdialog' => true, 'msgtype' => 3, 'closetime' => 10)); 489 } 490 $emailstatus = 0; 491 if($this->setting['sendregisterurl'] && !$sendurl) { 492 $_GET['email'] = strtolower($hash[0]); 493 $this->setting['regverify'] = $this->setting['regverify'] == 1 ? 0 : $this->setting['regverify']; 494 if(!$this->setting['regverify']) { 495 $groupinfo['groupid'] = $this->setting['newusergroupid']; 496 } 497 $emailstatus = 1; 498 } 499 500 if($this->setting['regstatus'] == 2 && empty($invite) && !$invitestatus) { 501 showmessage('not_open_registration_invite'); 502 } 503 504 if($bbrules && $bbrulehash != $_POST['agreebbrule']) { 505 showmessage('register_rules_agree'); 506 } 507 508 $activation = array(); 509 if(isset($_GET['activationauth'])) { 510 $activationauth = explode("\t", authcode($_GET['activationauth'], 'DECODE')); 511 if($activationauth[1] == FORMHASH && !($activation = uc_get_user($activationauth[0]))) { 512 showmessage('register_activation_invalid', 'member.php?mod=logging&action=login'); 513 } 514 } 515 516 if(!$activation) { 517 $usernamelen = dstrlen($username); 518 if($usernamelen < 3) { 519 showmessage('profile_username_tooshort'); 520 } elseif($usernamelen > 15) { 521 showmessage('profile_username_toolong'); 522 } 523 if(uc_get_user(addslashes($username)) && !C::t('common_member')->fetch_uid_by_username($username) && !C::t('common_member_archive')->fetch_uid_by_username($username)) { 524 if($_G['inajax']) { 525 showmessage('profile_username_duplicate'); 526 } else { 527 showmessage('register_activation_message', 'member.php?mod=logging&action=login', array('username' => $username)); 528 } 529 } 530 if($this->setting['pwlength']) { 531 if(strlen($_GET['password']) < $this->setting['pwlength']) { 532 showmessage('profile_password_tooshort', '', array('pwlength' => $this->setting['pwlength'])); 533 } 534 } 535 if($this->setting['strongpw']) { 536 $strongpw_str = array(); 537 if(in_array(1, $this->setting['strongpw']) && !preg_match("/\d+/", $_GET['password'])) { 538 $strongpw_str[] = lang('member/template', 'strongpw_1'); 539 } 540 if(in_array(2, $this->setting['strongpw']) && !preg_match("/[a-z]+/", $_GET['password'])) { 541 $strongpw_str[] = lang('member/template', 'strongpw_2'); 542 } 543 if(in_array(3, $this->setting['strongpw']) && !preg_match("/[A-Z]+/", $_GET['password'])) { 544 $strongpw_str[] = lang('member/template', 'strongpw_3'); 545 } 546 if(in_array(4, $this->setting['strongpw']) && !preg_match("/[^a-zA-z0-9]+/", $_GET['password'])) { 547 $strongpw_str[] = lang('member/template', 'strongpw_4'); 548 } 549 if($strongpw_str) { 550 showmessage(lang('member/template', 'password_weak').implode(',', $strongpw_str)); 551 } 552 } 553 $email = strtolower(trim($_GET['email'])); 554 if(empty($this->setting['ignorepassword'])) { 555 if($_GET['password'] !== $_GET['password2']) { 556 showmessage('profile_passwd_notmatch'); 557 } 558 559 if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) { 560 showmessage('profile_passwd_illegal'); 561 } 562 $password = $_GET['password']; 563 } else { 564 $password = md5(random(10)); 565 } 566 } 567 568 $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($this->setting['censoruser'] = trim($this->setting['censoruser'])), '/')).')$/i'; 569 570 if($this->setting['censoruser'] && @preg_match($censorexp, $username)) { 571 showmessage('profile_username_protect'); 572 } 573 574 if($this->setting['regverify'] == 2 && !trim($_GET['regmessage'])) { 575 showmessage('profile_required_info_invalid'); 576 } 577 578 if($_G['cache']['ipctrl']['ipregctrl']) { 579 foreach(explode("\n", $_G['cache']['ipctrl']['ipregctrl']) as $ctrlip) { 580 if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) { 581 $ctrlip = $ctrlip.'%'; 582 $this->setting['regctrl'] = $this->setting['ipregctrltime']; 583 break; 584 } else { 585 $ctrlip = $_G['clientip']; 586 } 587 } 588 } else { 589 $ctrlip = $_G['clientip']; 590 } 591 592 if($this->setting['regctrl']) { 593 if(C::t('common_regip')->count_by_ip_dateline($ctrlip, $_G['timestamp']-$this->setting['regctrl']*3600)) { 594 showmessage('register_ctrl', NULL, array('regctrl' => $this->setting['regctrl'])); 595 } 596 } 597 598 $setregip = null; 599 if($this->setting['regfloodctrl']) { 600 $regip = C::t('common_regip')->fetch_by_ip_dateline($_G['clientip'], $_G['timestamp']-86400); 601 if($regip) { 602 if($regip['count'] >= $this->setting['regfloodctrl']) { 603 showmessage('register_flood_ctrl', NULL, array('regfloodctrl' => $this->setting['regfloodctrl'])); 604 } else { 605 $setregip = 1; 606 } 607 } else { 608 $setregip = 2; 609 } 610 } 611 612 $profile = $verifyarr = array(); 613 foreach($_G['cache']['fields_register'] as $field) { 614 if(defined('IN_MOBILE')) { 615 break; 616 } 617 $field_key = $field['fieldid']; 618 $field_val = $_GET[''.$field_key]; 619 if($field['formtype'] == 'file' && !empty($_FILES[$field_key]) && $_FILES[$field_key]['error'] == 0) { 620 $field_val = true; 621 } 622 623 if(!profile_check($field_key, $field_val)) { 624 $showid = !in_array($field['fieldid'], array('birthyear', 'birthmonth')) ? $field['fieldid'] : 'birthday'; 625 showmessage($field['title'].lang('message', 'profile_illegal'), '', array(), array( 626 'showid' => 'chk_'.$showid, 627 'extrajs' => $field['title'].lang('message', 'profile_illegal').($field['formtype'] == 'text' ? '<script type="text/javascript">'. 628 '$(\'registerform\').'.$field['fieldid'].'.className = \'px er\';'. 629 '$(\'registerform\').'.$field['fieldid'].'.onblur = function () { if(this.value != \'\') {this.className = \'px\';$(\'chk_'.$showid.'\').innerHTML = \'\';}}'. 630 '</script>' : '') 631 )); 632 } 633 if($field['needverify']) { 634 $verifyarr[$field_key] = $field_val; 635 } else { 636 $profile[$field_key] = $field_val; 637 } 638 } 639 640 if(!$activation) { 641 $uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']); 642 643 if($uid <= 0) { 644 if($uid == -1) { 645 showmessage('profile_username_illegal'); 646 } elseif($uid == -2) { 647 showmessage('profile_username_protect'); 648 } elseif($uid == -3) { 649 showmessage('profile_username_duplicate'); 650 } elseif($uid == -4) { 651 showmessage('profile_email_illegal'); 652 } elseif($uid == -5) { 653 showmessage('profile_email_domain_illegal'); 654 } elseif($uid == -6) { 655 showmessage('profile_email_duplicate'); 656 } else { 657 showmessage('undefined_action'); 658 } 659 } 660 } else { 661 list($uid, $username, $email) = $activation; 662 } 663 $_G['username'] = $username; 664 if(getuserbyuid($uid, 1)) { 665 if(!$activation) { 666 uc_user_delete($uid); 667 } 668 showmessage('profile_uid_duplicate', '', array('uid' => $uid)); 669 } 670 671 $password = md5(random(10)); 672 $secques = $questionid > 0 ? random(8) : ''; 673 674 if(isset($_POST['birthmonth']) && isset($_POST['birthday'])) { 675 $profile['constellation'] = get_constellation($_POST['birthmonth'], $_POST['birthday']); 676 } 677 if(isset($_POST['birthyear'])) { 678 $profile['zodiac'] = get_zodiac($_POST['birthyear']); 679 } 680 681 if($_FILES) { 682 $upload = new discuz_upload(); 683 684 foreach($_FILES as $key => $file) { 685 $field_key = 'field_'.$key; 686 if(!empty($_G['cache']['fields_register'][$field_key]) && $_G['cache']['fields_register'][$field_key]['formtype'] == 'file') { 687 688 $upload->init($file, 'profile'); 689 $attach = $upload->attach; 690 691 if(!$upload->error()) { 692 $upload->save(); 693 694 if(!$upload->get_image_info($attach['target'])) { 695 @unlink($attach['target']); 696 continue; 697 } 698 699 $attach['attachment'] = dhtmlspecialchars(trim($attach['attachment'])); 700 if($_G['cache']['fields_register'][$field_key]['needverify']) { 701 $verifyarr[$key] = $attach['attachment']; 702 } else { 703 $profile[$key] = $attach['attachment']; 704 } 705 } 706 } 707 } 708 } 709 710 if($setregip !== null) { 711 if($setregip == 1) { 712 C::t('common_regip')->update_count_by_ip($_G['clientip']); 713 } else { 714 C::t('common_regip')->insert(array('ip' => $_G['clientip'], 'count' => 1, 'dateline' => $_G['timestamp'])); 715 } 716 } 717 718 if($invite && $this->setting['inviteconfig']['invitegroupid']) { 719 $groupinfo['groupid'] = $this->setting['inviteconfig']['invitegroupid']; 720 } 721 722 $init_arr = array('credits' => explode(',', $this->setting['initcredits']), 'profile'=>$profile, 'emailstatus' => $emailstatus); 723 724 C::t('common_member')->insert($uid, $username, $password, $email, $_G['clientip'], $groupinfo['groupid'], $init_arr); 725 if($emailstatus) { 726 updatecreditbyaction('realemail', $uid); 727 } 728 if($verifyarr) { 729 $setverify = array( 730 'uid' => $uid, 731 'username' => $username, 732 'verifytype' => '0', 733 'field' => serialize($verifyarr), 734 'dateline' => TIMESTAMP, 735 ); 736 C::t('common_member_verify_info')->insert($setverify); 737 C::t('common_member_verify')->insert(array('uid' => $uid)); 738 } 739 740 require_once libfile('cache/userstats', 'function'); 741 build_cache_userstats(); 742 743 if($this->extrafile && file_exists($this->extrafile)) { 744 require_once $this->extrafile; 745 } 746 747 if($this->setting['regctrl'] || $this->setting['regfloodctrl']) { 748 C::t('common_regip')->delete_by_dateline($_G['timestamp']-($this->setting['regctrl'] > 72 ? $this->setting['regctrl'] : 72)*3600); 749 if($this->setting['regctrl']) { 750 C::t('common_regip')->insert(array('ip' => $_G['clientip'], 'count' => -1, 'dateline' => $_G['timestamp'])); 751 } 752 } 753 754 $regmessage = dhtmlspecialchars($_GET['regmessage']); 755 if($this->setting['regverify'] == 2) { 756 C::t('common_member_validate')->insert(array( 757 'uid' => $uid, 758 'submitdate' => $_G['timestamp'], 759 'moddate' => 0, 760 'admin' => '', 761 'submittimes' => 1, 762 'status' => 0, 763 'message' => $regmessage, 764 'remark' => '', 765 ), false, true); 766 manage_addnotify('verifyuser'); 767 } 768 769 setloginstatus(array( 770 'uid' => $uid, 771 'username' => $_G['username'], 772 'password' => $password, 773 'groupid' => $groupinfo['groupid'], 774 ), 0); 775 include_once libfile('function/stat'); 776 updatestat('register'); 777 778 if($invite['id']) { 779 $result = C::t('common_invite')->count_by_uid_fuid($invite['uid'], $uid); 780 if(!$result) { 781 C::t('common_invite')->update($invite['id'], array('fuid'=>$uid, 'fusername'=>$_G['username'], 'regdateline' => $_G['timestamp'], 'status' => 2)); 782 updatestat('invite'); 783 } else { 784 $invite = array(); 785 } 786 } 787 if($invite['uid']) { 788 if($this->setting['inviteconfig']['inviteaddcredit']) { 789 updatemembercount($uid, array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['inviteaddcredit'])); 790 } 791 if($this->setting['inviteconfig']['invitedaddcredit']) { 792 updatemembercount($invite['uid'], array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['invitedaddcredit'])); 793 } 794 require_once libfile('function/friend'); 795 friend_make($invite['uid'], $invite['username'], false); 796 notification_add($invite['uid'], 'friend', 'invite_friend', array('actor' => '<a href="home.php?mod=space&uid='.$invite['uid'].'" target="_blank">'.$invite['username'].'</a>'), 1); 797 798 space_merge($invite, 'field_home'); 799 if(!empty($invite['privacy']['feed']['invite'])) { 800 require_once libfile('function/feed'); 801 $tite_data = array('username' => '<a href="home.php?mod=space&uid='.$_G['uid'].'">'.$_G['username'].'</a>'); 802 feed_add('friend', 'feed_invite', $tite_data, '', array(), '', array(), array(), '', '', '', 0, 0, '', $invite['uid'], $invite['username']); 803 } 804 if($invite['appid']) { 805 updatestat('appinvite'); 806 } 807 } 808 809 if($welcomemsg && !empty($welcomemsgtxt)) { 810 $welcomemsgtitle = replacesitevar($welcomemsgtitle); 811 $welcomemsgtxt = replacesitevar($welcomemsgtxt); 812 if($welcomemsg == 1) { 813 $welcomemsgtxt = nl2br(str_replace(':', ':', $welcomemsgtxt)); 814 notification_add($uid, 'system', $welcomemsgtxt, array('from_id' => 0, 'from_idtype' => 'welcomemsg'), 1); 815 } elseif($welcomemsg == 2) { 816 sendmail_cron($email, $welcomemsgtitle, $welcomemsgtxt); 817 } elseif($welcomemsg == 3) { 818 sendmail_cron($email, $welcomemsgtitle, $welcomemsgtxt); 819 $welcomemsgtxt = nl2br(str_replace(':', ':', $welcomemsgtxt)); 820 notification_add($uid, 'system', $welcomemsgtxt, array('from_id' => 0, 'from_idtype' => 'welcomemsg'), 1); 821 } 822 } 823 824 if($fromuid) { 825 updatecreditbyaction('promotion_register', $fromuid); 826 dsetcookie('promotion', ''); 827 } 828 dsetcookie('loginuser', ''); 829 dsetcookie('activationauth', ''); 830 dsetcookie('invite_auth', ''); 831 832 $url_forward = dreferer(); 833 $refreshtime = 3000; 834 switch($this->setting['regverify']) { 835 case 1: 836 $idstring = random(6); 837 $authstr = $this->setting['regverify'] == 1 ? "$_G[timestamp]\t2\t$idstring" : ''; 838 C::t('common_member_field_forum')->update($_G['uid'], array('authstr' => $authstr)); 839 $verifyurl = "{$_G[siteurl]}member.php?mod=activate&uid={$_G[uid]}&id=$idstring"; 840 $email_verify_message = lang('email', 'email_verify_message', array( 841 'username' => $_G['member']['username'], 842 'bbname' => $this->setting['bbname'], 843 'siteurl' => $_G['siteurl'], 844 'url' => $verifyurl 845 )); 846 if(!sendmail("$username <$email>", lang('email', 'email_verify_subject'), $email_verify_message)) { 847 runlog('sendmail', "$email sendmail failed."); 848 } 849 $message = 'register_email_verify'; 850 $locationmessage = 'register_email_verify_location'; 851 $refreshtime = 10000; 852 break; 853 case 2: 854 $message = 'register_manual_verify'; 855 $locationmessage = 'register_manual_verify_location'; 856 break; 857 default: 858 $message = 'register_succeed'; 859 $locationmessage = 'register_succeed_location'; 860 break; 861 } 862 $param = array('bbname' => $this->setting['bbname'], 'username' => $_G['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['uid']); 863 if(strpos($url_forward, $this->setting['regname']) !== false || strpos($url_forward, 'buyinvitecode') !== false) { 864 $url_forward = 'forum.php'; 865 } 866 $href = str_replace("'", "\'", $url_forward); 867 $extra = array( 868 'showid' => 'succeedmessage', 869 'extrajs' => '<script type="text/javascript">'. 870 'setTimeout("window.location.href =\''.$href.'\';", '.$refreshtime.');'. 871 '$(\'succeedmessage_href\').href = \''.$href.'\';'. 872 '$(\'main_message\').style.display = \'none\';'. 873 '$(\'main_succeed\').style.display = \'\';'. 874 '$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'. 875 '</script>', 876 'striptags' => false, 877 ); 878 showmessage($message, $url_forward, $param, $extra); 879 } 880 } 881 882 } 883 884 class crime_action_ctl { 885 886 var $actions = array('all', 'crime_delpost', 'crime_warnpost', 'crime_banpost', 'crime_banspeak', 'crime_banvisit', 'crime_banstatus', 'crime_avatar', 'crime_sightml', 'crime_customstatus'); 887 888 function crime_action_ctl() {} 889 890 function &instance() { 891 static $object; 892 if(empty($object)) { 893 $object = new crime_action_ctl(); 894 } 895 return $object; 896 } 897 898 function recordaction($uid, $action, $reason) { 899 global $_G; 900 901 $uid = intval($uid); 902 $key = array_search($action, $this->actions); 903 if($key === FALSE) { 904 return false; 905 } 906 $insert = array( 907 'uid' => $uid, 908 'operatorid' => $_G['uid'], 909 'operator' => $_G['username'], 910 'action' => $key, 911 'reason' => $reason, 912 'dateline' => $_G['timestamp'] 913 ); 914 C::t('common_member_crime')->insert($insert); 915 return true; 916 } 917 918 function getactionlist($uid) { 919 $uid = intval($uid); 920 $clist = array(); 921 foreach(C::t('common_member_crime')->fetch_all_by_uid($uid) as $c) { 922 $c['action'] = $this->actions[$c['action']]; 923 $clist[] = $c; 924 } 925 return $clist; 926 } 927 928 function getcount($uid, $action) { 929 $uid = intval($uid); 930 $key = array_search($action, $this->actions); 931 if($key === FALSE) { 932 return 0; 933 } 934 return C::t('common_member_crime')->count_by_uid_action($uid, $key); 935 } 936 937 function search($action, $username, $operator, $startime, $endtime, $reason, $start, $limit) { 938 $action = intval($action); 939 $operator = daddslashes(trim($operator)); 940 $starttime = $starttime ? strtotime($starttime) : 0; 941 $endtime = $endtime ? (strtotime($endtime) + 3600 * 24) : 0; 942 $reason = daddslashes(trim($reason)); 943 $start = intval($start); 944 $limit = intval($limit); 945 946 if(!empty($username)) { 947 $uid = C::t('common_member')->fetch_uid_by_username($username); 948 $wheresql[] = "uid='$uid'"; 949 } 950 951 if($action) { 952 $wheresql[] = "action='$action'"; 953 } 954 if($operator) { 955 $wheresql[] = "operator='$operator'"; 956 } 957 if($starttime) { 958 $wheresql[] = "dateline>='$starttime'"; 959 } 960 if($endtime) { 961 $wheresql[] = "dateline<='$endtime'"; 962 } 963 if($reason) { 964 $wheresql[] = "reason LIKE '%$reason%'"; 965 } 966 967 if($wheresql) { 968 $wheresql = 'WHERE '.implode(' AND ', $wheresql); 969 } else { 970 $wheresql = ''; 971 } 972 $clist = array(); 973 $count = C::t('common_member_crime')->count_by_where($wheresql); 974 975 if($count) { 976 $uids = array(); 977 foreach(C::t('common_member_crime')->fetch_all_by_where($wheresql, $start, $limit) as $crime) { 978 $crime['action'] = $this->actions[$crime['action']]; 979 $clist[] = $crime; 980 $uids[$crime['uid']] = $crime['uid']; 981 } 982 $members = C::t('common_member')->fetch_all($uids, false, 0); 983 foreach($clist as $key => $crime) { 984 $crime['username'] = $members[$crime['uid']]['username']; 985 $clist[$key] = $crime; 986 } 987 } 988 return array($count, $clist); 989 } 990 } 991 ?>
基本的已经更改完毕,你只要直接查找‘cas’ ,将cas服务器个相关信息更改就可以了。
然后是修改 Discuz2.5\uc_client\control\user.php
1 <?php 2 3 /* 4 [UCenter] (C)2001-2099 Comsenz Inc. 5 This is NOT a freeware, use is subject to license terms 6 7 $Id: user.php 1082 2011-04-07 06:42:14Z svn_project_zhangjie $ 8 */ 9 10 !defined('IN_UC') && exit('Access Denied'); 11 12 define('UC_USER_CHECK_USERNAME_FAILED', -1); 13 define('UC_USER_USERNAME_BADWORD', -2); 14 define('UC_USER_USERNAME_EXISTS', -3); 15 define('UC_USER_EMAIL_FORMAT_ILLEGAL', -4); 16 define('UC_USER_EMAIL_ACCESS_ILLEGAL', -5); 17 define('UC_USER_EMAIL_EXISTS', -6); 18 19 class usercontrol extends base { 20 21 22 function __construct() { 23 $this->usercontrol(); 24 } 25 26 function usercontrol() { 27 parent::__construct(); 28 $this->load('user'); 29 $this->app = $this->cache['apps'][UC_APPID]; 30 } 31 32 // -1 未开启 33 function onsynlogin() { 34 $this->init_input(); 35 $uid = $this->input('uid'); 36 if($this->app['synlogin']) { 37 if($this->user = $_ENV['user']->get_user_by_uid($uid)) { 38 $synstr = ''; 39 foreach($this->cache['apps'] as $appid => $app) { 40 if($app['synlogin'] && $app['appid'] != $this->app['appid']) { 41 $synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&password='.$this->user['password']."&time=".$this->time, 'ENCODE', $app['authkey'])).'"></script>'; 42 } 43 } 44 return $synstr; 45 } 46 } 47 return ''; 48 } 49 50 function onsynlogout() { 51 $this->init_input(); 52 if($this->app['synlogin']) { 53 $synstr = ''; 54 foreach($this->cache['apps'] as $appid => $app) { 55 if($app['synlogin'] && $app['appid'] != $this->app['appid']) { 56 $synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogout&time='.$this->time, 'ENCODE', $app['authkey'])).'"></script>'; 57 } 58 } 59 return $synstr; 60 } 61 return ''; 62 } 63 64 function onregister() { 65 $this->init_input(); 66 $username = $this->input('username'); 67 $password = $this->input('password'); 68 $email = $this->input('email'); 69 $questionid = $this->input('questionid'); 70 $answer = $this->input('answer'); 71 $regip = $this->input('regip'); 72 73 if(($status = $this->_check_username($username)) < 0) { 74 return $status; 75 } 76 if(($status = $this->_check_email($email)) < 0) { 77 return $status; 78 } 79 $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip); 80 return $uid; 81 } 82 83 function onedit() { 84 $this->init_input(); 85 $username = $this->input('username'); 86 $oldpw = $this->input('oldpw'); 87 $newpw = $this->input('newpw'); 88 $email = $this->input('email'); 89 $ignoreoldpw = $this->input('ignoreoldpw'); 90 $questionid = $this->input('questionid'); 91 $answer = $this->input('answer'); 92 93 if(!$ignoreoldpw && $email && ($status = $this->_check_email($email, $username)) < 0) { 94 return $status; 95 } 96 $status = $_ENV['user']->edit_user($username, $oldpw, $newpw, $email, $ignoreoldpw, $questionid, $answer); 97 98 if($newpw && $status > 0) { 99 $this->load('note'); 100 $_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='); 101 $_ENV['note']->send(); 102 } 103 return $status; 104 } 105 106 function onlogin() { 107 $this->init_input(); 108 $isuid = $this->input('isuid'); 109 $username = $this->input('username'); 110 $password = $this->input('password'); 111 $checkques = $this->input('checkques'); 112 $questionid = $this->input('questionid'); 113 $answer = $this->input('answer'); 114 if($isuid == 1) { 115 $user = $_ENV['user']->get_user_by_uid($username); 116 } elseif($isuid == 2) { 117 $user = $_ENV['user']->get_user_by_email($username); 118 } else { 119 $user = $_ENV['user']->get_user_by_username($username); 120 } 121 122 //$user = $_ENV['user']->get_user_by_username($username); 123 124 if(empty($user)) { 125 $status = -1; 126 } else { 127 $status = $user['uid']; 128 } 129 $merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0; 130 return array($status, $user['username'], $password, $user['email'], $merge); 131 } 132 133 function oncheck_email() { 134 $this->init_input(); 135 $email = $this->input('email'); 136 return $this->_check_email($email); 137 } 138 139 function oncheck_username() { 140 $this->init_input(); 141 $username = $this->input('username'); 142 if(($status = $this->_check_username($username)) < 0) { 143 return $status; 144 } else { 145 return 1; 146 } 147 } 148 149 function onget_user() { 150 $this->init_input(); 151 $username = $this->input('username'); 152 if(!$this->input('isuid')) { 153 $status = $_ENV['user']->get_user_by_username($username); 154 } else { 155 $status = $_ENV['user']->get_user_by_uid($username); 156 } 157 if($status) { 158 return array($status['uid'],$status['username'],$status['email']); 159 } else { 160 return 0; 161 } 162 } 163 164 165 function ongetprotected() { 166 $protectedmembers = $this->db->fetch_all("SELECT uid,username FROM ".UC_DBTABLEPRE."protectedmembers GROUP BY username"); 167 return $protectedmembers; 168 } 169 170 function ondelete() { 171 $this->init_input(); 172 $uid = $this->input('uid'); 173 return $_ENV['user']->delete_user($uid); 174 } 175 176 function onaddprotected() { 177 $this->init_input(); 178 $username = $this->input('username'); 179 $admin = $this->input('admin'); 180 $appid = $this->app['appid']; 181 $usernames = (array)$username; 182 foreach($usernames as $username) { 183 $user = $_ENV['user']->get_user_by_username($username); 184 $uid = $user['uid']; 185 $this->db->query("REPLACE INTO ".UC_DBTABLEPRE."protectedmembers SET uid='$uid', username='$username', appid='$appid', dateline='{$this->time}', admin='$admin'", 'SILENT'); 186 } 187 return $this->db->errno() ? -1 : 1; 188 } 189 190 function ondeleteprotected() { 191 $this->init_input(); 192 $username = $this->input('username'); 193 $appid = $this->app['appid']; 194 $usernames = (array)$username; 195 foreach($usernames as $username) { 196 $this->db->query("DELETE FROM ".UC_DBTABLEPRE."protectedmembers WHERE username='$username' AND appid='$appid'"); 197 } 198 return $this->db->errno() ? -1 : 1; 199 } 200 201 function onmerge() { 202 $this->init_input(); 203 $oldusername = $this->input('oldusername'); 204 $newusername = $this->input('newusername'); 205 $uid = $this->input('uid'); 206 $password = $this->input('password'); 207 $email = $this->input('email'); 208 if(($status = $this->_check_username($newusername)) < 0) { 209 return $status; 210 } 211 $uid = $_ENV['user']->add_user($newusername, $password, $email, $uid); 212 $this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$oldusername'"); 213 return $uid; 214 } 215 216 function onmerge_remove() { 217 $this->init_input(); 218 $username = $this->input('username'); 219 $this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$username'"); 220 return NULL; 221 } 222 223 function _check_username($username) { 224 $username = addslashes(trim(stripslashes($username))); 225 if(!$_ENV['user']->check_username($username)) { 226 return UC_USER_CHECK_USERNAME_FAILED; 227 } elseif(!$_ENV['user']->check_usernamecensor($username)) { 228 return UC_USER_USERNAME_BADWORD; 229 } elseif($_ENV['user']->check_usernameexists($username)) { 230 return UC_USER_USERNAME_EXISTS; 231 } 232 return 1; 233 } 234 235 function _check_email($email, $username = '') { 236 if(empty($this->settings)) { 237 $this->settings = $this->cache('settings'); 238 } 239 if(!$_ENV['user']->check_emailformat($email)) { 240 return UC_USER_EMAIL_FORMAT_ILLEGAL; 241 } elseif(!$_ENV['user']->check_emailaccess($email)) { 242 return UC_USER_EMAIL_ACCESS_ILLEGAL; 243 } elseif(!$this->settings['doublee'] && $_ENV['user']->check_emailexists($email, $username)) { 244 return UC_USER_EMAIL_EXISTS; 245 } else { 246 return 1; 247 } 248 } 249 250 function onuploadavatar() { 251 } 252 253 function onrectavatar() { 254 } 255 function flashdata_decode($s) { 256 } 257 } 258 259 ?>
然后下面改的就是登录部分了,我将之前的‘登录’和‘注册’修改成了‘一键登录’和‘注册’,代码如下,可以根据自己的情况修改
1 <?php 2 if(!defined('IN_DISCUZ')) exit('Access Denied'); if(CURMODULE != 'logging') { 3 ?> 4 <script src="<?php echo $_G['setting']['jspath'];?>logging.js?<?php echo VERHASH;?>" type="text/javascript"></script> 5 <form method="post" autocomplete="off" id="lsform" action="member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes" onsubmit="<?php if($_G['setting']['pwdsafety']) { ?>pwmd5('ls_password');<?php } ?>return lsSubmit();"> 6 <div class="fastlg cl"> 7 <span id="return_ls" style="display:none"></span> 8 <div class="y pns"> 9 <table cellspacing="0" cellpadding="0"> 10 <tr> 11 <?php 12 if(!$_G['setting']['autoidselect']) { 13 ?> 14 <td> 15 16 <script type="text/javascript">simulateSelect('ls_fastloginfield')</script> 17 </td> 18 <td></td> 19 <?php 20 } else { 21 ?> 22 <td><label for="ls_username">帐号</label></td> 23 <td><input type="text" name="username" id="ls_username" class="px vm xg1" <?php if($_G['setting']['autoidselect']) { ?> value="UID/用户名/Email" onfocus="if(this.value == 'UID/用户名/Email'){this.value = '';this.className = 'px vm';}" onblur="if(this.value == ''){this.value = 'UID/用户名/Email';this.className = 'px vm xg1';}"<?php } ?> tabindex="901" /></td> 24 <?php 25 } 26 ?> 27 <td class="fastlg_l"> </td> 28 <td></td> 29 </tr> 30 <tr> 31 <td></td> 32 <td></td> 33 <td class="fastlg_l"><button type="submit" class="pn vm" tabindex="904" style="width: 75px;"><em>一键登录</em></button></td> 34 <td> <a href="member.php?mod=<?php echo $_G['setting']['regname'];?>" class="xi2 xw1"><?php echo $_G['setting']['reglinkname'];?></a></td> 35 </tr> 36 </table> 37 <input type="hidden" name="quickforward" value="yes" /> 38 <input type="hidden" name="handlekey" value="ls" /> 39 </div> 40 <?php 41 if(!empty($_G['setting']['pluginhooks']['global_login_extra'])) echo $_G['setting']['pluginhooks']['global_login_extra']; 42 ?> 43 </div> 44 </form> 45 46 <?php 47 if($_G['setting']['pwdsafety']) { 48 ?> 49 <script src="<?php echo $_G['setting']['jspath'];?>md5.js?<?php echo VERHASH;?>" type="text/javascript" reload="1"></script> 50 <?php 51 52 } 53 } 54 55 ?>
至此,就差不多完成了。