CodeIgniter 3 Login Class Throws array_key_exists () ожидает, что параметр 2 будет массивом, задан ноль

1

Наш исходный код CodeIgniter 3 имеет класс Auth, расположенный в приложениях/библиотеках со следующей функцией:

public function login($attempt) {
    $CI = & get_instance();
    $CI->load->model("users");

    // Store password entry
    $password = $attempt["password"];

    // Get user from database
    $user = $CI->users->get(array("screen_name" => $attempt["screen_name"]));

    if (!array_key_exists("password", $user)) {
        return null;
    }

    // Validate password
    $valid = crypt($password, $user["password"]) == $user["password"];
    if ($valid) {
        // Remove password - user data will be stored in session 
        unset($user["password"]);

        // If no photo uploaded, set default
        if (!isset($user["photo"]) || $user["photo"] == null) {
            $user["photo"] = "http://oururl/ourroute/assets/images/DefaultAvatar.png";
        } else {
            //$user["photo"] = "files/images/" . $user["photo"];
        }
        return $user;
    } else {
        return false;
    }
}

Сначала я думал, что возвращаемое значение должно быть изменено с false на null. Однако ошибка сохраняется после изменения возвращаемого значения. Поскольку ни нулевые, ни ложные возвращаемые значения не облегчают ситуацию, какой другой подход следует принять для исправления ошибки?

  • 0
    Сообщение об ошибке - ваш ответ. $user is null
  • 0
    Какая библиотека аутентификации используется?
Показать ещё 1 комментарий
Теги:
arrays
codeigniter

1 ответ

1
Лучший ответ

Проблема состоит в том, что эта строка возвращает null, а не массив

$user = $CI->users->get(array("screen_name" => $attempt["screen_name"]));

Прежде чем передать $ user функции array_key_exists(), вы должны убедиться, что база данных вернула осмысленный результат.

Этот сегмент кода будет записан как таковой

if ($user == null || !array_key_exists("password", $user)) {
    return null;
}

При этом вы не передадите значение null для array_key_exists

Ещё вопросы

Сообщество Overcoder
Наверх
Меню