使用用户名和/或电子邮件登录


Login with username and/or email

我已经为一个问题挣扎了很多天,所以我最终决定寻求一些帮助。我想实现一个登录,在一个输入字段中接受用户的电子邮件或用户名。我只使用用户名登录可以正常工作,但我尝试过使用电子邮件登录,但根本没有成功。

我在mysql中的表字段是"用户名"answers"电子邮件",如果有人能给我一些帮助,那就太好了!非常感谢!

这是我尝试过的代码:

public function find($user = null) {
    if($user) {
     $field = (is_numeric($user)) ? 'id' : 'username';
     $data = $this->_db->get('users', array($field, '=', $user));
        if($data->count()) {
            $this->_data = $data->first();
            return true;
        }
    }
    else if($user) {
     $field = (is_numeric($user)) ? 'id' : 'email';
     $data = $this->_db->get('users', array($field, '=', $user));
        if($data->count()) {
            $this->_data = $data->first();
            return true;
        }
    }
    return false;
}
public function login($username = null, $useremail = null, $password = null, $remember = false) {
    if(!$username && !$password || !$useremail && !$password && $this->exists()) {
        Session::put($this->_sessionName, $this->data()->id);
    } else {
        $user = $this->find($username);
        $useremail = $this->find($email);
        if($user or $useremail) {
            if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);                   
                if($remember) {
                    $hash = Hash::unique();
                    $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
                    if(!$hashCheck->count()) {
                        $this->_db->insert('users_session', array(
                            'user_id' => $this->data()->id,
                            'hash' => $hash
                        ));
                    } else {
                        $hash = $hashCheck->first()->hash;
                    }   
                    Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                }
                return true;
            }
        }
    }
    return false;
}

您可以使用此查询从users表中获取row_id

$sql = "select * from `users` where username = $input OR email = $input";

您可以在find方法中执行类似操作:

$field = null;
if (is_numeric($user)) {
    $field = 'id';
}
else if(is_string($user)) {
    if (filter_var($user, FILTER_VALIDATE_EMAIL)) {
        $field = 'email';
    }
    else {
        $field = 'username';
    }
}
if (null == $field) {
    return false;
}
$data = $this->_db->get('users', array($field, '=', $user));
....