Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[经验] uchome 邮箱注册修改

[复制链接]
mrsaner 发表于 2009-4-24 13:39:24 | 显示全部楼层 |阅读模式
UCHome插件
语言编码: GBK简体 
插件名称: uchome 邮箱注册修改
插件作者: dz
适用版本: UCHome 2.0
本帖最后由 mrsaner 于 2011-6-1 14:25 编辑

这个好麻烦,看uchome的代码,函数嵌套很多,所以就用了一个简单的方法,很快修改完成:
修改方法如下:
1:先把注册用户名的长度修改长些,默认[3-15]
          打开ucenter/model/user.php
          function check_username($username) {
  $guestexp = 'xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8';
  $len = strlen($username);
  //if($len > 36 || $len < 3 || preg_match("/s+|^c:concon|[%,*"s<>&]|$guestexp/is", $username)) {
  //tommy
  if($len > 36 || $len < 3 || !check_emailformat($username)) {
   return FALSE;
  } else {
   return TRUE;
  }
}
修改成如上主要把长度改下,然后变为邮箱验证。check_emailformat()这个函数也在user.php里面,是偶然发现的。里面还有个
function check_usernameexists($username) {
  $data = $this->db->result_first("SELECT username FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
  return $data;
}
应该是判断用户名是否存在的,但这里没有用,用户名是否存在在注册的时候自己写查询检测了下。
2:register.htm
     有一个js验证:
if(unLen < 3 || unLen > 36) {
   warning(cu, unLen < 3 ? '用户名小于3个字符' : '用户名超过 36 个字符');
   return;
  },修改过来。
3:修改注册
source/do_register.php(这个要修改两个地方)
下面是93-126行修改后的代码,红色部分是原来的行数对应的,下面加了验证,屏蔽了原来的注册方式:
$username = trim($_POST['username']);
  $password = $_POST['password'];

  //$email = trim($_POST['email']);
  $email = $username;//tommy
  
  //tommy
  !isemail($username)?showmessage('邮箱不合法!'):'';
  //已注册
  $query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
  $u=$_SGLOBAL['db']->fetch_array($query);
  !empty($u)?showmessage('email_has_been_registered'):'';
  
  $query=$_SGLOBAL['db']->query('select uid from '.tname('member').' order by uid desc limit 0,1');
  $value=$_SGLOBAL['db']->fetch_array($query);
  $newuid=$value['uid']+1;
  
  //$newuid = uc_user_register($username, $password, $email);
  if($newuid <= 0) {
   /*if($newuid == -1) {
    showmessage('user_name_is_not_legitimate');
   } elseif($newuid == -2) {
    showmessage('include_not_registered_words');
   } elseif($newuid == -3) {
    showmessage('user_name_already_exists');
   } elseif($newuid == -4) {
    showmessage('email_format_is_wrong');
   } elseif($newuid == -5) {
    showmessage('email_not_registered');
   } elseif($newuid == -6) {
    showmessage('email_has_been_registered');
   } else {
    showmessage('register_error');
   }
   */
然后在数据库插入记录的时候要修改下密码加密方式:
   $setarr = array(
    'uid' => $newuid,
    'username' => $username,
    'password' => md5("$password")//本地密码随机生成
   );
我改成了直接md5,要是按原来的是不能登陆的
下一步:
还在这个页面查找:$op == "checkusername"
$username = trim($_GET['username']);
if(empty($username)) {
  showmessage('user_name_is_not_legitimate');
}
@include_once (S_ROOT.'./uc_client/client.php');

  //tommy
!isemail($username)?showmessage('邮箱不合法!'):'';

//已注册
$query=$_SGLOBAL['db']->query("select uid from ".tname('member')." where username='$username'");
$u=$_SGLOBAL['db']->fetch_array($query);
!empty($u)?showmessage('email_has_been_registered'):showmessage('succeed');

/*
$ucresult = uc_user_checkname($username);
if($ucresult == -1) {
  showmessage('user_name_is_not_legitimate');
} elseif($ucresult == -2) {
  showmessage('include_not_registered_words');
} elseif($ucresult == -3) {
  showmessage('user_name_already_exists');
} else {
  showmessage('succeed');
}
*/
这是那个elseif里面的内容,原来的代码都给注释掉了,这里是用来js验证的,就是register.htm里面的那个
ajaxresponse('checkusername', 'op=checkusername&username=' + (is_ie && document.charset == 'utf-8' ? encodeURIComponent(userName) : userName));
4:修改source/do_login.php
由于在上面修改了密码加密机制,要修改下登录的验证方式。
找到,按照下面方式修改,这个是我朋友啊神的修改方法,还可以让网站的老用户按照uch原来的密码加密机制登录:
//同步获取用户源
$passport = getpassport($username, $password);
if(empty($passport)){
  $password = md5("$password");
  $sql="select uid,username from ".tname('member')." where password='$password' and username='$username'";
  $query = $_SGLOBAL['db']->query($sql);
  $passport = $_SGLOBAL['db']->fetch_array($query);
  if(empty($passport)){
   showmessage('login_failure_please_re_login', 'do.php?ac='.$_SCONFIG['login_action']);
  }
}
5:最后一步最关键,也最简单:
那就是修改数据库字段的默认长度啦,原来为char(15),改为char(40),就ok了
这样就修改完成了。
uchome_space  uchome_member 中的username
然后再修改ucenter里面的uc_members的username的字段长度

评分

2

查看全部评分

Kicent 发表于 2009-4-24 13:40:25 | 显示全部楼层
关注中··········
回复

使用道具 举报

大冶联盟 发表于 2009-4-24 13:58:19 | 显示全部楼层
看哈
。。。。。。。。。。。。。。。
回复

使用道具 举报

arnol 发表于 2009-4-24 17:52:58 | 显示全部楼层
路过帮顶
回复

使用道具 举报

scckfzx 发表于 2009-4-24 18:45:38 | 显示全部楼层
check_emailformat()这个函数也在user.php里面,是偶然发现的。里面还有个
function check_usernameexists($username) {
  $data = $this->db->result_first("SELECT username FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
  return $data;
}
应该是判断用户名是否存在的,但这里没有用,用户名是否存在在注册的时候自己写查询检测了下。


这个函数在系统中起的作用是:

后台有一个是否允许邮箱重复注册功能,就是使用这个函数的。
回复

使用道具 举报

 楼主| mrsaner 发表于 2009-4-24 19:15:38 | 显示全部楼层
本帖最后由 mrsaner 于 2009-4-25 08:45 编辑

多谢楼上指正。。。。。。
回复

使用道具 举报

单车 发表于 2009-4-24 19:19:00 | 显示全部楼层
恩. 关注下!!~
回复

使用道具 举报

sam258 发表于 2009-4-24 20:10:23 | 显示全部楼层
多谢分享~~
回复

使用道具 举报

 楼主| mrsaner 发表于 2009-4-25 18:20:19 | 显示全部楼层
回复

使用道具 举报

zounei 发表于 2009-4-26 19:49:18 | 显示全部楼层
高手哇,LZ好人!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-27 16:13 , Processed in 0.033005 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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