关于优化ecshop注册登陆只需email

2016-09-11 20:39 来源:www.chinab4c.com 作者:ecshop专家

 现在很多主流的电商网站都直接用email作为会员账号,好处是省得用户既要想一个用户名,又要填邮箱,邮箱对于电商网站的重要性不用多提,因此用email作为会员的唯一标识是很合理的做法,ecshop模板网给出针对ECSHOP实现该功能的方法,原理是注册时将email表单的值顺便返回给username,并去掉注册时username的js验证,然后在登录中实现username跟email都可以登录,这样做的好处是,即实现了ecshop用email注册登录的功能,又不改动ecshop的数据库和后台功能,其实本质上没有变化什么,会员账号还是存在的,邮箱也是存在的,只是我们强制把会员账号等于email账号。 

首先修改注册部分

1,themes/****/user_passport.dwt 会员名称输入的表单,将之去掉


2,js/user.js 找到 function register() 并将以下代码删除

  if (username.length == 0)
  {
    msg += username_empty + '\\n';
  }
  else if (username.match(/^\\s*$|^c:\\\\con\\\\con$|[%,\\'\\*\\"\\s\\t\\<\\>\\&\\\\]/))
  {
    msg += username_invalid + '\\n';
  }
  else if (username.length < 3)
  {
    //msg += username_shorter + '\\n';
  }


3,user.php 找到 elseif ($action == 'act_register') 将以下代码
$username = isset($_POST['username']) ? trim($_POST['username']) : '';

改为

$username = isset($_POST['email']) ? trim($_POST['email']) : '';


其次实现登录时可以使用email登录

1,includes/modules/integrates/integrate.php 找到 function login 并将整个函数改为以下代码

function login($username, $password, $remember = null)
{
                 if(is_email($username))
                 {
                 $sql = "sel ect ".$this->field_name." from ".$this->table($this->user_table)." where ".$this->field_email."='".$username."'";
                 $username = $this->db->getOne($sql);
                 if(!$username) return false;
                 }
                 if ($this->check_user($username, $password) > 0)
                 {
                                 if ($this->need_sync)
                                 {
                                                 $this->sync($username,$password);
                                 }
                                 $this->set_session($username);
                                 $this->set_cookie($username, $remember);
                                 return true;
                 }
                 else
                 {
                                 return false;
                 }
}