admin 发表于 2016-5-23 19:25:12

DiscuzX3.2开发手机登录流程 禁止转载

DZ起点网原创未经许可,严禁转载!

第一步:修改登录模板找到登陆的模板文件,默认文件为:
/template/default/member/login.htm 登录模板引用Discuz模板目录结构对照表:
http://www.dz7.com.cn/dz7top-dztemplate.html

找到如下代码:
<option value="email">{lang email}</option>

在后面加上一句:

<option value="mobile">手机</option>

修改后保存:


第二步:修改登录流程

打开source\function\function_member.php

搜索代码:
userlogin($username, $password, $questionid,找到:
if($loginfield == 'uid' && getglobal('setting/uidlogin')) {
                $isuid = 1;
      } elseif($loginfield == 'email') {
                $isuid = 2;
      } elseif($loginfield == 'auto') {
                $isuid = 3;
      } else {
                $isuid = 0;
      }
修改为:
if($loginfield == 'uid' && getglobal('setting/uidlogin')) {
                $isuid = 1;
      } elseif($loginfield == 'email') {
                $isuid = 2;
      } elseif($loginfield == 'auto') {
                $isuid = 3;
      } elseif($loginfield == 'mobile') {
                $isuid = 4;
      } else {
                $isuid = 0;
      }

修改后保存!

第三步:修改UC流程

打开uc_client\control\user.php

搜索:
$user = $_ENV['user']->get_user_by_uid($username);找到:
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);
                }保存

第四步:添加登陆模型

打开uc_client\model\user.php

搜索:
function get_user_by_uid($uid)找到function get_user_by_uid($uid) {
                $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
                return $arr;
      }
在他的上面或者下面添加如下代码

function get_user_by_mobile($mobile) {
                $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE mobile='$mobile'");
                return $arr;
      }
然后保存!


第五步:修改MySql数据表
....
.....
.......未完待续!

DZ起点网原创未经许可,严禁转载!

admin 发表于 2016-5-23 23:36:42

登陆的时候是用到了UC表中的mobile字段,但是这个字段uc_members并没有,所有我们要在这个里面加一个mobile字段如下:

额这里用varchar 255是因为官方的common_member_profile表中也是用的varchar 255 严格意义上来说是不能这样的,这里就将就下!这个里面就放登陆的手机号码。其实任意字符都可以... ....黑线.... .....


那么在注册的时候就要用到这个手机号码,所以注册流程也要改一下
打开文件:source/class/class_member.php

搜索:
on_register
找到:
$_GET['username'] = $_GET[''.$this->setting['reginput']['username']];
                $_GET['password'] = $_GET[''.$this->setting['reginput']['password']];
                $_GET['password2'] = $_GET[''.$this->setting['reginput']['password2']];
                $_GET['email'] = $_GET[''.$this->setting['reginput']['email']];      添加一个:
$mobile=$_GET['mobile'];


$_GET['mobile']需要在注册页面上面创建一个表单,表单的name="mobile"    这个就不用多说了把!
然后在注册方法中加上mobile参数



然后在这个文件中接着搜索:
uc_user_register找到:
$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']);改为:
$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip'],$mobile);

然后打开文件:uc_client/client.php

搜索:
uc_user_register
找到:
function uc_user_register($username, $password, $email, $questionid = '', $answer = '', $regip = '') {
      return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer, 'regip' => $regip));
}
改为:
function uc_user_register($username, $password, $email, $questionid = '', $answer = '', $regip = '',$mobile='') {
      return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer, 'regip' => $regip ,'mobile'=>$mobile));
}

然后打开文件:uc_client/control/user.php
搜索:
onregister修改:
function onregister() {
                $this->init_input();
                $username = $this->input('username');
                $password =$this->input('password');
                $email = $this->input('email');
                $questionid = $this->input('questionid');
                $answer = $this->input('answer');
                $regip = $this->input('regip');

                if(($status = $this->_check_username($username)) < 0) {
                        return $status;
                }
                if(($status = $this->_check_email($email)) < 0) {
                        return $status;
                }
                $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip);
                return $uid;
        }为
function onregister() {
                $this->init_input();
                $username = $this->input('username');
                $password =$this->input('password');
                $email = $this->input('email');
                $questionid = $this->input('questionid');
                $answer = $this->input('answer');
                $regip = $this->input('regip');
                $mobile = $this->input('mobile');

                if(($status = $this->_check_username($username)) < 0) {
                        return $status;
                }
                if(($status = $this->_check_email($email)) < 0) {
                        return $status;
                }
                $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip,$mobile);
                return $uid;
        }其实就是加了($mobile = $this->input('mobile');)和改了个($uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip,$mobile);)


然后打开文件:uc_client/model/user.php

搜索:
add_user找到:
function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
                $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='',";
                $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;
      }改为:
function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '', $mobile = '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='',";
                $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt', mobile='$mobile'");
                $uid = $this->db->insert_id();
                $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
                return $uid;
      }

然后保存
注册流程完成!


到此整个手机号码登陆及注册的流程就完成了!

本文由DZ起点网原创,未经许可严禁转载!如有疑问请在本贴下方提问!


carry0987 发表于 2016-8-11 16:04:10

請問...第五步驟的數據表示修改哪個?求詳細...

ntl7124423 发表于 2016-8-12 02:12:02

不错,让人眼前一亮,也是作者的心血,先留印迹,备看。

技术帮助 发表于 2016-8-12 14:34:51

carry0987 发表于 2016-8-11 16:04
請問...第五步驟的數據表示修改哪個?求詳細...

uc_members
页: [1]
查看完整版本: DiscuzX3.2开发手机登录流程 禁止转载