ecshop邮箱登录

由于,ecshop中本身注册时就有邮箱唯一的验证,同时用户名中也不能包含@符号。

所以,只需要考虑控制登录的login方法(public_htm/includes/modules/integrates/integrate.php中)。

在该方法中增加如下代码

function login($username, $password, $remember = null)
{
 if(is_email($username)) 
 { 
	$sql = "select ".$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;
 }
}

其中用到了include/lib_common.php文件中的is_email()方法

function is_email($user_email)
{
 $chars = "/^([a-z0-9 _]|\\-|\\.) @(([a-z0-9_]|\\-) \\.) [a-z]{2,6}\$/i";
 //通过strpos()函数判断传入字符串是否包含@与.
 if (strpos($user_email, "@") !== false && strpos($user_email, ".") !== false)
 {
 if (preg_match($chars, $user_email))
 {
 return true;
 }
 else
 {
 return false;
 }
 }
 else
 {
 return false;
 }
}

也就是说先判断提交过来的$username是否为邮箱,如果是就去数据库里取相应的username,取到username以后继续执行原来的方法就可以了。如果邮箱在数据库中不存在就返回false。