Вход с помощью имени пользователя или электронной почты - PullRequest
1 голос
/ 17 февраля 2012

Я пишу проверку администратора, чтобы убедиться, что адрес электронной почты, который входит в область администрирования:

  • Пользователь администратора
  • Активен

До сих пор я написал следующий код:

Контроллер:

$this->form_validation->set_rules('userName','userName', 'required|trim|max_length[99]|callback_admin_check|xss_clean');

function _admin_check($adminUsername, $adminEmail)
            {
                if($this->users_model->admin_check($adminUsername) || $this->users_model->admin_check($adminEmail))
                {
                    $this->form_validation->set_message('admin_check', 'Sorry you have an %s error!');
                    return FALSE;
                }else{
                    return TRUE;
                }

Что меня смущает, так это то, что я хотел бы, чтобы он принял обаимя администратора или адрес электронной почты, если userGroup == admin или если учетная запись userActive == yes, но я не уверен, как мне построить модель или какие данные отправить в модель.

Обновление-> Джо:

Джо,

Просто пара вопросов:

  • Я все еще устанавливаю свои сообщения об ошибках валидации, где оно return false?
  • Могу ли я в любом случае проверить, является ли учетная запись учетной записью администратора и активна ?
  • Модель в порядке?

Контроллер:

function _admin_check($adminUsername = null, $adminEmail = null)
    {
        $adminUser = $this->user_model->admin_check($adminUsername,$adminEmail);

        //if the UN || PW are not correct

        if(! $adminUser)
        {
            $this->session->set_flashdata('login_error', TRUE); // Does not bother adding incorrect data into the session for the Admin Login
            $this->form_validation->set_message('admin_check', 'Sorry you have a %s error!');
            return FALSE;
        }else{
            //Set the session data
            $this->session->set_userdata('logged_in', TRUE);
            $this->session->set_userdata('userId',$adminUser->id);
            $this->session->set_userdata('userFirstName',$adminUser->userFirstName);
            $this->session->set_userdata('userLastName',$adminUser->userLastName);
            $this->session->set_userdata('userEmail',$adminUser->userEmail);
            $this->session->set_userdata('userGroup',$adminUser->userGroup);
            $this->session->set_userdata('userActive',$adminUser->userActive);
            return TRUE;
        }

Модель:

            function admin_check($adminUsername, $adminEmail)
    {
            if(is_null($adminUsername && is_null($adminEmail)))
            {
                return FALSE;
            }

            if(is_null($adminUsername))
            {
                $login_field = 'userEmail';
                $login_name = '$adminEmail';
            }else{
                $login_field = 'userName';
                $login_name = '$adminUsername'
            }

            $this->db->select($login_field,$login_name);
            $this->db->from('users');
            $this->db->where('userName', $adminUsername , 'userEmail' , $adminEmail );
            $query = $this->db-get();

            if($query->num_rows() > 0)
            {
                return TRUE;
            }else{
                return FALSE;
            }
        }

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вы можете создать метод модели для получения 2 параметров, то есть имени пользователя и адреса электронной почты.

function admin_check($username = NULL, $email = NULL)

Теперь, если вы хотите проверить, используя имя пользователя, просто вызовите функцию, например admin_check($username). Но если вы хотите проверить по электронной почте, вы можете передать NULL в качестве первого параметра, а письмо в качестве второго.

Затем внутри функции создайте оператор if, чтобы проверить, является ли первый параметр NULL. Если так, сделайте проверку, используя адрес электронной почты. В противном случае используйте имя пользователя для проверки.

if ($username === NULL)
{
    // use the email address to do the authentication
}
else
{
    // use $username instead 
}
2 голосов
/ 17 февраля 2012

Установите значения по умолчанию для обоих параметров в null: function _admin_check($adminUsername = null, $adminEmail = null)

Затем в верхней части метода в модели добавьте:

function admin_check($adminUsername = null, $adminEmail = null)
{
    if (is_null($adminUsername) && is_null($adminEmail))
    {
        return false;
    }

    if (is_null($adminUsername))
    {
        $login_field = 'email'; // field in the table
        $login_name = $adminEmail; // value of the field
    }
    else
    {
        $login_field = 'username';
        $login_name = $adminUsername;
    }

    // Your SQL here, using $login_field and $login_name

Для вызова с именем пользователя,Звоните так:

$this->users_model->admin_check($adminUsername);
$this->users_model->admin_check($adminUsername, null); // or this

И для электронной почты

$this->users_model->admin_check(null, $adminEmail);

Чтобы позвонить в один:

$this->users_model->admin_check($adminUsername, $adminEmail);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...