本帖最后由 mrsaner 于 2011-6-1 14:25 编辑
这个好麻烦,看uchome的代码,函数嵌套很多,所以就用了一个简单的方法,很快修改完成:
修改方法如下:
1:先把注册用户名的长度修改长些,默认[3-15]
打开ucenter/model/user.php
function check_username($username) {
$guestexp = 'xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8';
$len = strlen($username);
//if($len > 36 || $len < 3 || preg_match("/s+|^c:concon|[%,*"s<>&]|$guestexp/is", $username)) {
//tommy
if($len > 36 || $len < 3 || !check_emailformat($username)) {
return FALSE;
} else {
return TRUE;
}
}
修改成如上主要把长度改下,然后变为邮箱验证。check_emailformat()这个函数也在user.php里面,是偶然发现的。里面还有个
function check_usernameexists($username) {
$data = $this->db->result_first("SELECT username FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
return $data;
}
应该是判断用户名是否存在的,但这里没有用,用户名是否存在在注册的时候自己写查询检测了下。
2:register.htm
有一个js验证:
if(unLen < 3 || unLen > 36) {
warning(cu, unLen < 3 ? '用户名小于3个字符' : '用户名超过 36 个字符');
return;
},修改过来。
3:修改注册
source/do_register.php(这个要修改两个地方)
下面是93-126行修改后的代码,红色部分是原来的行数对应的,下面加了验证,屏蔽了原来的注册方式:
$username = trim($_POST['username']);
$password = $_POST['password'];
//$email = trim($_POST['email']);
$email = $username;//tommy
//tommy
!isemail($username)?showmessage('邮箱不合法!'):'';
//已注册
$query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
$u=$_SGLOBAL['db']->fetch_array($query);
!empty($u)?showmessage('email_has_been_registered'):'';
$query=$_SGLOBAL['db']->query('select uid from '.tname('member').' order by uid desc limit 0,1');
$value=$_SGLOBAL['db']->fetch_array($query);
$newuid=$value['uid']+1;
//$newuid = uc_user_register($username, $password, $email);
if($newuid <= 0) {
/*if($newuid == -1) {
showmessage('user_name_is_not_legitimate');
} elseif($newuid == -2) {
showmessage('include_not_registered_words');
} elseif($newuid == -3) {
showmessage('user_name_already_exists');
} elseif($newuid == -4) {
showmessage('email_format_is_wrong');
} elseif($newuid == -5) {
showmessage('email_not_registered');
} elseif($newuid == -6) {
showmessage('email_has_been_registered');
} else {
showmessage('register_error');
}
*/
然后在数据库插入记录的时候要修改下密码加密方式:
$setarr = array(
'uid' => $newuid,
'username' => $username,
'password' => md5("$password")//本地密码随机生成
);
我改成了直接md5,要是按原来的是不能登陆的
下一步:
还在这个页面查找:$op == "checkusername"
$username = trim($_GET['username']);
if(empty($username)) {
showmessage('user_name_is_not_legitimate');
}
@include_once (S_ROOT.'./uc_client/client.php');
//tommy
!isemail($username)?showmessage('邮箱不合法!'):'';
//已注册
$query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
$u=$_SGLOBAL['db']->fetch_array($query);
!empty($u)?showmessage('email_has_been_registered'):showmessage('succeed');
/*
$ucresult = uc_user_checkname($username);
if($ucresult == -1) {
showmessage('user_name_is_not_legitimate');
} elseif($ucresult == -2) {
showmessage('include_not_registered_words');
} elseif($ucresult == -3) {
showmessage('user_name_already_exists');
} else {
showmessage('succeed');
}
*/
这是那个elseif里面的内容,原来的代码都给注释掉了,这里是用来js验证的,就是register.htm里面的那个
ajaxresponse('checkusername', 'op=checkusername&username=' + (is_ie && document.charset == 'utf-8' ? encodeURIComponent(userName) : userName));
4:修改source/do_login.php
由于在上面修改了密码加密机制,要修改下登录的验证方式。
找到,按照下面方式修改,这个是我朋友啊神的修改方法,还可以让网站的老用户按照uch原来的密码加密机制登录:
//同步获取用户源
$passport = getpassport($username, $password);
if(empty($passport)){
$password = md5("$password");
$sql="select uid,username from ".tname('member')." where password='$password' and username='$username'";
$query = $_SGLOBAL['db']->query($sql);
$passport = $_SGLOBAL['db']->fetch_array($query);
if(empty($passport)){
showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
}
}
5:最后一步最关键,也最简单:
那就是修改数据库字段的默认长度啦,原来为char(15),改为char(40),就ok了
这样就修改完成了。
uchome_space uchome_member 中的username
然后再修改ucenter里面的uc_members的username的字段长度 |