#php #codeigniter #session #codeigniter-3
#php #codeigniter #сеанс #codeigniter-3
Вопрос:
Я работаю над приложением для социальной сети с Codeigniter 3, Ion-Auth и Bootstrap 4. Вы можете увидеть репозиторий Github ЗДЕСЬ.
Я хочу сохранить first_name зарегистрированного пользователя в текущем сеансе. Для этой цели в исходный $session_data
массив я добавил строку 'user_first_name' => $user->first_name,
$session_data = [
'identity' => $user->{$this->identity_column},
$this->identity_column => $user->{$this->identity_column},
'email' => $user->email,
'user_id' => $user->id,
'user_first_name' => $user->first_name, //retrieve from the first_name column
'old_last_login' => $user->last_login,
'last_check' => time(),
'ion_auth_session_hash' => $this->config->item('session_hash', 'ion_auth'),
];
Смысл этого в том, чтобы показать приветственное сообщение после входа в систему с идентификатором пользователя:
Welcome, <?php echo $this->session->userdata('user_first_name'); ?>
Я получаю am Undefined property $first_name
сообщение, и приветственное сообщение не содержит ничего, кроме «Добро пожаловать» (несмотря на то, что он $this->session->userdata('user_first_name')
возвращает идентификатор пользователя).
Чего не хватает?
Комментарии:
1. вы проверили в своей
users
таблице ion auth, что у вас есть правильные данные?2. Не хватает одного — номера файла и строки, в которых это происходит.
3. @Vickel да, dara есть.
4. Я думаю, вы не хотите устанавливать сеанс. Например,
$this->session->set_userdata('user_first_name', $user->first_name);
Ответ №1:
Краткий обзор того, что $user
в Ion_auth_model.php , set_session() использует var_dump, показывает, что это так…
LINE: 1944 Module Ion_auth_model
object(stdClass)#26 (5) {
["email"]=>
string(21) "frednurk@gmail.com"
["id"]=>
string(1) "8"
["password"]=>
string(60) "$2y$10$MGlESdMfrr/UNd.mdW4Vr.nyTqES0SB6rEnaDBOYocwU7yLXVqNMq"
["active"]=>
string(1) "1"
["last_login"]=>
string(10) "1599322333"
}
Который не содержит first_name. Это то, что вы ожидали из-за вашего сообщения об ошибке.
Поиск, где это вызывается, приведет вас обратно к Ion_auth_model.php — вход в систему, где запрос выбора для $user является
$query = $this->db->select($this->identity_column . ', email, id, password, active, last_login')
->where($this->identity_column, $identity)
->limit(1)
->order_by('id', 'desc')
->get($this->tables['users']);
И, как и ожидалось, отсутствует first_name.
Поэтому добавляем first_name в Select вот так…
$query = $this->db->select($this->identity_column . ', email, id, password, active, last_login, first_name')
->where($this->identity_column, $identity)
->limit(1)
->order_by('id', 'desc')
->get($this->tables['users']);
Приводит к тому, что $user становится…
LINE: 1944 Module Ion_auth_model
object(stdClass)#26 (6) {
["email"]=>
string(21) "frednurk@gmail.com"
["id"]=>
string(1) "8"
["password"]=>
string(60) "$2y$10$MGlESdMfrr/UNd.mdW4Vr.nyTqES0SB6rEnaDBOYocwU7yLXVqNMq"
["active"]=>
string(1) "1"
["last_login"]=>
string(10) "1599322333"
["first_name"]=>
string(3) "Tim"
}
И тогда все хорошо.
Заключение
- Прочитайте сообщения об ошибках
- Выполните отладку, проверив ваши переменные / массив / объекты, чтобы увидеть, что они собой представляют.
- Вернитесь и исправьте это.
При отладке у меня есть этот небольшой фрагмент кода, который я использую
echo '<pre>';
echo 'LINE: '. __LINE__. ' Module '.__CLASS__.'<br>';
var_dump(WHAT_TO_LOOK_AT_GOES_HERE);
echo '</pre>';