Наш исходный код 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. Однако ошибка сохраняется после изменения возвращаемого значения. Поскольку ни нулевые, ни ложные возвращаемые значения не облегчают ситуацию, какой другой подход следует принять для исправления ошибки?
Проблема состоит в том, что эта строка возвращает 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
$user
is null