[原创]为Discuz_X1.5增加手机号码登陆功能
应朋友的要求,需要为他所管理的Discuz_X1.5设置一个手机登陆功能,特做此探索
首先,要在Discuz_X1.5的管理员后台开启手机这一项,并设置为必填项不可修改,不显示什么的,开启正则过滤
对pre_common_member(我这里设置的前缀是pre)表新建一个字段,mobile,char型,大小20,以防别人输入+86什么的
打开目录source\module\member下的member_register.php文件,搜索$userdata = array( 这一行,在之前插入这一段话
	if(isset($_POST['mobile'])){
		$mobile=$_POST['mobile'];
	}
然后再把 	$userdata = array(
		'uid' => $uid,
		'username' => $username,
		'password' => $password,
		'email' => $email,
		'adminid' => 0,
		'groupid' => $groupinfo['groupid'],
		'regdate' => TIMESTAMP,
		'credits' => $init_arr[0],
		'timeoffset' => 9999
		);
改成
	$userdata = array(
		'uid' => $uid,
		'username' => $username,
		'password' => $password,
		'email' => $email,
		'adminid' => 0,
		'groupid' => $groupinfo['groupid'],
		'regdate' => TIMESTAMP,
		'credits' => $init_arr[0],
		'timeoffset' => 9999,
		'mobile'=> $mobile
		);
就是在$userdata这个数组的最后一项后加一个  ,'mobile'=> $mobile
这样子就能够保证手机号写入member库里了。
然后,就要开启手机登陆模式。
打开source\function\function_member.php,将
	$return = array();
	if($loginfield == 'uid') {
		$isuid = 1;
	} elseif($loginfield == 'email') {
		$isuid = 2;
	} elseif($loginfield == 'auto') {
		$isuid = 3;
	} else {
		$isuid = 0;
	}
修改为
	$return = array();
	if($loginfield == 'uid') {
		$isuid = 1;
	} elseif($loginfield == 'email') {
		$isuid = 2;
	} elseif($loginfield == 'auto') {
		$isuid = 3;
	} elseif($loginfield == 'mobile') {
		$isuid = 4;
	}else {
		$isuid = 0;
	}
打开uc_client\control\user.php 找到
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);
		}
改为
		if($isuid == 1) {
			$user = $_ENV['user']->get_user_by_uid($username);
		} elseif($isuid == 2) {
			$user = $_ENV['user']->get_user_by_email($username);
		} elseif($isuid == 4) {
			$user = $_ENV['user']->get_user_by_mobile($username);
		}else {
			$user = $_ENV['user']->get_user_by_username($username);
		}
即增加了一种mobile的登陆方式判断。
打开uc_client\model\user.php 找到 function get_user_by_uid($uid)  在其上一行加入如下函数
	function get_user_by_mobile($mobile) {
		$arr = $this->db->fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE mobile='$mobile'");
		$uid = $arr["uid"];
		$arr2 = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
		return $arr2;
	}
最后,在几个模板里增添手机登陆项,采用的模板因人而异,笔者采用的是default模板,修改方式是
打开template\default\member\login.htm 和 login_simple.htm 找到<option value="email">{lang email}</option>
在其下面增加一行 <option value="mobile">手机</option> 。
总结:本来是准备直接在 ".UC_DBTABLEPRE."members  表 即系统的pre_ucenter_members表里面增加一个mobile字段的,但是考虑到可能会对以后要安装的插件的兼容性等问题,还是决定只在pre_common_member(Discuz_X1.5的用户表)里添加mobile字段。故最后一段高手看起来改的有点脱裤子放屁的感觉~~呵呵
按此种方法修改,有两个很明显的弊端,
1、一旦用户注册,就不能够修改手机,即使在后台开放修改,也只能够使用之前的手机才能登陆成功;
2、如果有两个相投的手机注册,那么也会有问题,当然这种可能性比较小
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
Post Comment
- 偽物ブランド激安市場 
 ━…━…━…━…━…━…━…━…━…━…━…
 ルイヴィトン、シャネル、グッチ、エルメス、クロエ、プラダ、 ブルガリ、ロレックス、カルテ
 ィエ 、オメガ偽物(コピー商品)のブランドのバッグ、財布、腕時計の販売、通販。
 ━…━…━…━…━…━…━…━…━…━…━…
 ◇各種のベルト(BELT)、最低の価格の2500円
 ◇ブランドのバッグ、最低価格の4500円
 ◇ブランドの腕時計、最低の価格の7000円
 ━…━…━…━…━…━…━…━…━…━…━…
 ◆ スタイルが多い、品質がよい、価格が低い!
 ● SS品質 シリアル付きも有り 付属品完備!
 ◆ 必ずご満足頂ける品質の商品のみ販売しております.
 ● 品質を最大限本物と同等とする為に相応の材質にて製作している為です.
 ◆ 絶対に満足して頂ける品のみ皆様にお届け致します.
 人気の売れ筋商品を多数取り揃えております。
 全て激安特価でご提供.お願いします.
 ルイ・ヴィトンスーパーコピー[124.41.211.*]2018/10/12 7:57:06#1
ルイ・ヴィトンスーパーコピー[124.41.211.*]2018/10/12 7:57:06#1