UCenter、UChome增加邮箱地址登录功能

很多使用UCenter作为用户账户管理中心的朋友想要让其支持邮箱登录,一些开发者甚至自己去写了很多代码来实现这个功能。其实没有那么麻烦,要支持邮箱登录只需对你的应用做一点小小的改动就可以了。

注意:要使用邮箱登录功能的话,建议你在UCenter后台管理中设置不允许重复的邮箱地址!

因为UCenter客户端API中本身就支持邮箱登录,只是应用项目不支持这种方式的调用。

我们来看一下API中的登录函数uc_user_login,下面是官方给出的函数说明

array uc_user_login(
string username ,//用户ID、用户名、用户邮箱都是它
string password [,//密码
bool isuid ,//1表示使用ID登录,0表示使用用户名登录(默认)
bool checkques ,//1表示要验证安全问题,0表示不验证(默认)
integer questionid ,//安全提问索引
string answer]//安全提问答案
)

注意isuid 参数,官方没有提到,其实还可以使用另一个值'2',表示使用邮箱地址登录。

由此我们就有办法在应用中增加邮箱登录的功能了!

拿UChome来说, 如果你是使用post远程API通信,只需修改/source/function_common.php文件
找到getpassport($username, $password)函数,加入一点用户名是否为邮箱的判断,代码如下

//获取用户数据
function getpassport($username, $password) {
global $_SGLOBAL, $_SC;

$passport = array();
if (!@include_once S_ROOT . './uc_client/client.php') {
showmessage('system_error');
}
//判断是否是邮箱
if(strpos($username, '@')) $isuid = 2;
else $isuid = 0;
$ucresult = uc_user_login($username, $password, $isuid);
if ($ucresult[0] > 0) {
$passport['uid'] = $ucresult[0];
$passport['username'] = $ucresult[1];
$passport['email'] = $ucresult[3];
}
return $passport;
}


如果你是使用mysql API的方式,则还要修改两个地方
一是UChome目录下的客户端API:/uc_client/control/user.php的onlogin()函数,如下

//note public 外部接口 登陆接口
function onlogin() {
$this->init_input();
$isuid = $this->input('isuid');
$username = $this->input('username');
$password = $this->input('password');
$checkques = $this->input('checkques');
$questionid = $this->input('questionid');
$answer = $this->input('answer');
if($isuid == 1) {
$user = $_ENV['user']->get_user_by_uid($username);
} elseif($isuid == 2) {//邮箱登录功能在这里哦
$user = $_ENV['user']->get_user_by_email($username);
} else {
$user = $_ENV['user']->get_user_by_username($username);
}

$passwordmd5 = preg_match('/^\w{32}$/', $password) ? $password : md5($password);
//note 用户名不存在
if(empty($user)) {
$status = -1;
} elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
$status = -2;
} elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
$status = -3;
} else {
$status = $user['uid'];
}
$merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0;
return array($status, $user['username'], $password, $user['email'], $merge);
}


二是UChome目录下的客户端API /uc_client/model/user.php ,增加一个邮箱登录的函数,这个函数是从UCenter\model\user.php中抄过来的。

function get_user_by_email($email) {
$arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE email='$email'");
return $arr;
}

按照这种方法,给予UCenter的其他应用项目都可以支持邮箱登录了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值