找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 12465|回复: 4

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

  [复制链接]
发表于 2016-5-23 19:25:12 | 显示全部楼层 |阅读模式
DZ起点网原创未经许可,严禁转载!

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

找到如下代码:
  1. <option value="email">{lang email}</option>
复制代码
1.jpg

在后面加上一句:

  1. <option value="mobile">手机</option>
复制代码
2.jpg

修改后保存:


第二步:修改登录流程

打开source\function\function_member.php

搜索代码:
  1. userlogin($username, $password, $questionid,
复制代码
找到:
  1. if($loginfield == 'uid' && getglobal('setting/uidlogin')) {
  2.                 $isuid = 1;
  3.         } elseif($loginfield == 'email') {
  4.                 $isuid = 2;
  5.         } elseif($loginfield == 'auto') {
  6.                 $isuid = 3;
  7.         } else {
  8.                 $isuid = 0;
  9.         }
复制代码
1.jpg
修改为:
  1. if($loginfield == 'uid' && getglobal('setting/uidlogin')) {
  2.                 $isuid = 1;
  3.         } elseif($loginfield == 'email') {
  4.                 $isuid = 2;
  5.         } elseif($loginfield == 'auto') {
  6.                 $isuid = 3;
  7.         } elseif($loginfield == 'mobile') {
  8.                 $isuid = 4;
  9.         } else {
  10.                 $isuid = 0;
  11.         }
复制代码
2.jpg

修改后保存!

第三步:修改UC流程

打开uc_client\control\user.php

搜索:
  1. $user = $_ENV['user']->get_user_by_uid($username);
复制代码
找到:
  1. if($isuid == 1) {
  2.                         $user = $_ENV['user']->get_user_by_uid($username);
  3.                 } elseif($isuid == 2) {
  4.                         $user = $_ENV['user']->get_user_by_email($username);
  5.                 } else {
  6.                         $user = $_ENV['user']->get_user_by_username($username);
  7.                 }
复制代码
修改为:
  1. if($isuid == 1) {
  2.                         $user = $_ENV['user']->get_user_by_uid($username);
  3.                 } elseif($isuid == 2) {
  4.                         $user = $_ENV['user']->get_user_by_email($username);
  5.                 } elseif($isuid == 4) {
  6.                         $user = $_ENV['user']->get_user_by_mobile($username);
  7.                 } else {
  8.                         $user = $_ENV['user']->get_user_by_username($username);
  9.                 }
复制代码
保存

第四步:添加登陆模型

打开uc_client\model\user.php

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

  1. function get_user_by_mobile($mobile) {
  2.                 $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE mobile='$mobile'");
  3.                 return $arr;
  4.         }
复制代码
3.jpg
然后保存!


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

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

使用道具 举报

 楼主| 发表于 2016-5-23 23:36:42 | 显示全部楼层
登陆的时候是用到了UC表中的mobile字段,但是这个字段uc_members并没有,所有我们要在这个里面加一个mobile字段如下:
1.jpg
额这里用varchar 255  是因为官方的common_member_profile表中也是用的varchar 255 严格意义上来说是不能这样的,这里就将就下!这个里面就放登陆的手机号码。其实任意字符都可以... ....黑线.... .....


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

搜索:
  1. on_register
复制代码

找到:
  1. $_GET['username'] = $_GET[''.$this->setting['reginput']['username']];
  2.                 $_GET['password'] = $_GET[''.$this->setting['reginput']['password']];
  3.                 $_GET['password2'] = $_GET[''.$this->setting['reginput']['password2']];
  4.                 $_GET['email'] = $_GET[''.$this->setting['reginput']['email']];        
复制代码
添加一个:
  1. $mobile=$_GET['mobile'];
复制代码
1.jpg


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



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

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

搜索:
  1. uc_user_register
复制代码

找到:
  1. function uc_user_register($username, $password, $email, $questionid = '', $answer = '', $regip = '') {
  2.         return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer, 'regip' => $regip));
  3. }
复制代码

改为:
  1. function uc_user_register($username, $password, $email, $questionid = '', $answer = '', $regip = '',$mobile='') {
  2.         return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer, 'regip' => $regip ,'mobile'=>$mobile));
  3. }
复制代码
1.jpg 2.jpg

然后打开文件:uc_client/control/user.php
搜索:
  1. onregister
复制代码
修改:
  1. function onregister() {
  2.                 $this->init_input();
  3.                 $username = $this->input('username');
  4.                 $password =  $this->input('password');
  5.                 $email = $this->input('email');
  6.                 $questionid = $this->input('questionid');
  7.                 $answer = $this->input('answer');
  8.                 $regip = $this->input('regip');

  9.                 if(($status = $this->_check_username($username)) < 0) {
  10.                         return $status;
  11.                 }
  12.                 if(($status = $this->_check_email($email)) < 0) {
  13.                         return $status;
  14.                 }
  15.                 $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip);
  16.                 return $uid;
  17.         }
复制代码

  1. function onregister() {
  2.                 $this->init_input();
  3.                 $username = $this->input('username');
  4.                 $password =  $this->input('password');
  5.                 $email = $this->input('email');
  6.                 $questionid = $this->input('questionid');
  7.                 $answer = $this->input('answer');
  8.                 $regip = $this->input('regip');
  9.                 $mobile = $this->input('mobile');

  10.                 if(($status = $this->_check_username($username)) < 0) {
  11.                         return $status;
  12.                 }
  13.                 if(($status = $this->_check_email($email)) < 0) {
  14.                         return $status;
  15.                 }
  16.                 $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip,$mobile);
  17.                 return $uid;
  18.         }
复制代码
其实就是加了($mobile = $this->input('mobile');)和改了个($uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip,$mobile);)
QQ截图20160523234906.jpg

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

搜索:
  1. add_user
复制代码
找到:
  1. function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
  2.                 $regip = empty($regip) ? $this->base->onlineip : $regip;
  3.                 $salt = substr(uniqid(rand()), -6);
  4.                 $password = md5(md5($password).$salt);
  5.                 $sqladd = $uid ? "uid='".intval($uid)."'," : '';
  6.                 $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
  7.                 $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
  8.                 $uid = $this->db->insert_id();
  9.                 $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
  10.                 return $uid;
  11.         }
复制代码
改为:
  1. function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '', $mobile = '0') {
  2.                 $regip = empty($regip) ? $this->base->onlineip : $regip;
  3.                 $salt = substr(uniqid(rand()), -6);
  4.                 $password = md5(md5($password).$salt);
  5.                 $sqladd = $uid ? "uid='".intval($uid)."'," : '';
  6.                 $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
  7.                 $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'");
  8.                 $uid = $this->db->insert_id();
  9.                 $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
  10.                 return $uid;
  11.         }
复制代码
1.jpg 2.jpg

然后保存
注册流程完成!


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

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


回复 1 0

使用道具 举报

发表于 2016-8-11 16:04:10 | 显示全部楼层
請問...第五步驟的數據表示修改哪個?求詳細...
回复

使用道具 举报

发表于 2016-8-12 02:12:02 | 显示全部楼层
不错,让人眼前一亮,也是作者的心血,先留印迹,备看。
回复

使用道具 举报

发表于 2016-8-12 14:34:51 | 显示全部楼层
carry0987 发表于 2016-8-11 16:04
請問...第五步驟的數據表示修改哪個?求詳細...

uc_members
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Discuz代码分析|Discuz目录结构|DZ起点网 ( 蜀ICP备13000518号-15 )

GMT+8, 2024-5-17 03:05 , Processed in 0.066661 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表