Ucenter添加手机号注册登录

来源:互联网 发布:扎克伯格起诉社交网络 编辑:程序博客网 时间:2024/06/11 20:11

登录比较简单

在pre_common_member(discuz用户表,可能前缀不一样),uc_members(UCenter用户表,可能前缀不一样)两张表增加mobile字段

发现登录调用的是UC的uc_user_login接口方法,此方法在uc_client/client.php文件里,

然后跟踪,在控制器文件夹uc_client/control/user.php里找到onlogin()方法,

继续跟踪在model文件uc_client/model/user.php找到get_user_by_username方法,将

1
$arr $this->db->fetch_first("SELECT * FROM 
".UC_DBTABLEPRE."members WHERE username='$username' ");

修改为:

1
$arr $this->db->fetch_first("SELECT * FROM 
".UC_DBTABLEPRE."members WHERE username='$username' or mobile='$username'");

注册

修改uc_client/control/user.php 里找到 _check_email()方法

return UC_USER_EMAIL_FORMAT_ILLEGAL;//

if(!$_ENV['user']->check_mobileformat($email)){//不符合手机格式
return UC_USER_EMAIL_FORMAT_ILLEGAL;//邮箱 格式不对
}elseif($_ENV['user']->check_mobileexists($email, $username)){//已存在手机
return -7;
}else{
return 2;
}

修改uc_client/control/user.php 里找到 onregister()方法

$uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip);

if($status==2){//使用手机注册
$uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip, 1);
}else{//使用邮箱注册
$uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip);
}


修改uc_client/model/user.php添加两个方法

//自己添加 检查手机格式
function check_mobileformat($email) {
return strlen($email) == 11 && preg_match("/^1[34578]\d{9}$/", $email);
}

//自己添加 检查手机是否已经注册
function check_mobileexists($email, $username = '') {
$sqladd = $username !== '' ? "AND username<>'$username'" : '';
$email = $this->db->result_first("SELECT email FROM  ".UC_DBTABLEPRE."members WHERE mobile='$email' $sqladd");
return $email;
}

修改uc_client/model/user.php里的 add_user()方法为(只对标红区域进行更改就可以)

function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '', $ismobile=0) {
$regip = empty($regip) ? $this->base->onlineip : $regip;
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($password).$salt);
$sqladd = $uid ? "uid='".intval($uid)."'," : '';
$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
if($ismobile==1){//使用手机号注册
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', mobile='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
}else{
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
}

$uid = $this->db->insert_id();
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
return $uid;
}

注:

此登录、注册都不是最优解决方案

登录时手机号和用户名共用了同一个变量$username

注册时在前台最好判断一下用户输入的是手机还是邮箱,因为手机和邮箱共用了同一个变量$email

如果用户输入一个10位数字,而前台没用正则判断,后台返回的错误码为-4,显示为
Email 格式有误,影响用户体验


有待优化


0 0
原创粉丝点击