繁体   English   中英

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

[英]Login with username and/or email

我已经为一个问题苦苦挣扎了好几天,所以我终于决定寻求帮助。 我想实现一个在一个输入字段中接受用户电子邮件或用户名的登录名。 我只有用户名的登录名可以正常工作,但是我尝试通过电子邮件登录,但完全没有成功。

我在mysql中的表字段是'username'和'email',如果有人可以给我一些帮助的话,那会很酷! 非常感谢你!

这是我尝试过的代码:

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));

....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM