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

 找回密码
 立即注册
搜索

[分享] UCHome1.5 实现支持Email注册登录 分享给大家

[复制链接]
chinalt 发表于 2009-10-30 19:09:30 | 显示全部楼层 |阅读模式
总的原则:
1.修改了UC登陆机制,服务端登陆代码和客户端登陆代码都修改了
2.修改了UCH注册和登录页面代码
注意:请大家仔细检查标点符号,必须是英文状态下
还有确定UC后台用户管理里面的email正确填写了
其次要确保不能有重复的email,否则也是登陆失败的

红色是要查找的代码,蓝色是要加入的代码,看清楚了哦
1.打开UCH根目录下的 uc_client/control/user.php 文件
(1)找到登陆接口 function onlogin() 继续往下找 加入蓝色的代码
  if($isuid) {
   $user = $_ENV['user']->get_user_by_uid($username);
  } else {
   $user = $_ENV['user']->get_user_by_username($username);
   if(empty($user)) $user = $_ENV['user']->get_user_by_email($username);
  }
2.打开UCH根目录下的 uc_client/model/user.php 文件 加入一个函数
(2)加入下面这个函数
function get_user_by_email($email) {
  $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE email='$email'");
  return $arr;
}
3.打开 template/default/do_register.htm 文件
(1)找到表格开始出 <table cellpadding="0" cellspacing="0" class="formtable">
在表格中你想要显示的位置加入一行
<tr>
     <th>邮箱</th>
     <td><input type="text" id="email" name="email" value="" class="t_input"onBlur="checkEmail()" tabindex="2" />&nbsp;<span id="checkemail">&nbsp;</span>
     <br>请准确填入您的邮箱,在忘记密码,或者您使用邮件通知功能时,会发送邮件到该邮箱。
     </td>
</tr>
(2)找到<script type="text/java script">位置,加入一个AJAX检测Email唯一性的JS函数
第一步,找到 $('username').focus();在此后面加入一个新的全局变量,加完后如下
var lastUserName = lastPassword = lastEmail = lastSecCode = '';
第二步,加入一新的函数
function checkEmail() {
    var email = $('email').value;
    if(email == lastEmail) {
       return;
    } else {
       lastEmail = email;
    }
    ajaxresponse('checkemail', 'op=checkemail&email=' + (is_ie && document.charset == 'utf-8' ? encodeURIComponent(email) : email));
}
4.打开 template/default/do_login.htm 文件
(1)此文件仅仅修改用户名三个字为Email/用户名,其他不用修改
5.打开 source/do_register.php 文件
(2)找到设置cookies的地方,修改为$email,修改后代码如下,直接替换
ssetcookie('loginuser', $email, 31536000);
(3)在最下面加入一个elseif结构用于处理Ajax检测Email唯一性的PHP处理代码,代码如下
} elseif($op == "checkemail") {
$email = trim($_GET['email']);
if(empty($email)) {
  showmessage('email_can_not_be_empty');
}
@include_once (S_ROOT.'./uc_client/client.php');
$ucresult = uc_user_checkemail($email);
if($ucresult > 0) {
  showmessage('succeed');
} elseif($ucresult == -4) {
  showmessage('email_format_is_wrong');
} elseif($ucresult == -5) {
  showmessage('email_not_registered');
} elseif($ucresult == -6) {
  showmessage('email_has_been_registered');
}
特别注意{}要匹配
6.打开 source/do_login.php 文件
(1)找到这个,修改为记录Email的cookies,修改后代码如下,直接替换
ssetcookie('loginuser', $passport['email'], 31536000);

如果你不明白为什么,可以私下找我讨论,这里就不解释了。
到此email注册登录机制完成,如果有问题,欢迎大家跟帖提出,我会及时更新的。

最后感谢大家的支持!

案例网站:车迷网(http://www.chemee.com)
回复

使用道具 举报

五元超市 发表于 2009-10-31 08:20:22 | 显示全部楼层
支持分享。
回复

使用道具 举报

 楼主| chinalt 发表于 2009-11-24 12:45:25 | 显示全部楼层
很好用哦,可以试试看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 03:33 , Processed in 0.099808 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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