Как сделать авторизацию в codeigniter?
Не отображается, что админ авторизован после ввода данных в форме, через строку все работает
<div class="panel panel-info">
<div class="panel-heading"><div class="sidebar-header">Вход</div></div>
<div class="panel-body">
<?php if(!$this->dx_auth->is_logged_in()): ?>
<form role="form" action="/auth/login/" method="post">
<div class="form-group">
<input type="text" class="form-control input-lg" placeholder="Логин" name="username">
</div>
<div class="form-group">
<input type="password" class="form-control input-lg" placeholder="Пароль" name="password">
</div>
<button type="submit" class="btn btn-warning pull-right">вход</button>
</form>
<?php else: ?>
Здравствуйте, <?php echo $this->dx_auth->get_username(); ?>
<a href="/auth/logout" class="btn btn-warning pull-right">выход</a>
<?php endif ?>
</div>
</div>
в чем может быть проблема?
18 ответов
Попробуй из этого урока скачать исходник. Там полностью рабочий код, я когда с сессиями разбирался, паралельно развернул этот проект и сравнивал со своим кодом.
Ребята, та же проблема.
открыл в 29 уроке исходник и там все нормально открывает и логиниться через тот же xampp и ту же версию php, но в моем проекте так же как у народа выше логиниться при зажатой remember. прошу помощи
ругается на вызов неопределенной функции set_value ()
в этом массиве
<?php
$remember = array( 'name' => 'remember',
'id' => 'remember',
'value' => 1,
'checked' => set_value('remember')); ?> <--- тут
даже с исходным кодом не работает, помогите
у меня не работает (есть предположение что в обновлениях были исправления, но точно не знаю)
# php -v
PHP 7.3.0 (cli) (built: Dec 6 2018 02:17:00) ( ZTS MSVC15 (Visual C++ 2017) x86
)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
и без галочки 'запомнить меня' он почему ты то не запоминает
help не могу разобраться
нету ошибки, в том то и дело, просто после входа через панель ничего не происходит, а если через адрес и с сохранением пароля то работает
хорошо сейчас попробую
Все заработало со старой версией и вправду проблема была в в новой версии php
а как тогда быть с новой версией ?
Не в версиях xampp и php дело. Я поставил самую последнюю версию xampp и в ней все работает. У кого не работает, значит ошибку где-то сделали. Качайте исходный код вместе с дампом базы из последнего урока, настраивайте и запускайте, потом со своим кодом сравнивайте.
Попробуй так:
<div class="panel panel-info">
<div class="panel-heading"><div class="sidebar-header">Вход</div></div>
<div class="panel-body">
<?php if (!$this->dx_auth->is_logged_in()): ?>
<?php
$remember = array(
'name' => 'remember',
'id' => 'remember',
'value' => 1,
'checked' => set_value('remember'));
?>
<?php echo $this->session->flashdata('general__error'); ?>
<form role="form" action="/auth/login/" method="post">
<div class="form-group">
<input type="text" class="form-control input-lg" placeholder="Логин" name="username">
<?php echo $this->session->flashdata('username__error'); ?>
</div>
<div class="form-group">
<input type="password" class="form-control input-lg" placeholder="Пароль" name="password">
<?php echo $this->session->flashdata('password__error'); ?>
</div>
<button type="submit" class="btn btn-warning pull-right">вход</button>
<dd>
<?php echo form_checkbox($remember);?> <?php echo form_label('Запомнить меня'.'<br>', $remember['id']);?>
<?php echo anchor($this->dx_auth->forgot_password_uri, 'Восстановить пароль'.'<br>');?>
<?php
if ($this->dx_auth->allow_registration) {
echo anchor($this->dx_auth->register_uri, 'Регистрация');
};
?>
</dd>
</form>
<?php else: ?>
Здравствуйте, <?php echo $this->dx_auth->get_username(); ?>
<a href="/auth/logout/" class="btn btn-warning pull-right">выход</a>
<?php endif ?>
</div>
</div>
Проект развернули из исходника? У меня работает корректно:
Стоит XAMPP:
# php -v
PHP 7.1.10 (cli) (built: Sep 26 2017 20:07:27) ( ZTS MSVC14 (Visual C++ 2015) x86 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
Скопируйте ошибку полностью со страницы, что пишет и сюда выложите.
Лучше наверное в саппорт сайта написать по этому вопросу
ребята. была проблема. решил с помощью варианта от Albert Shtana. Установка версии PHP От 7.1.10 не помогла. решил вот как:
C:\xampp\htdocs\kinomonster\system\libraries\Form_validation.php:
936: public function set_value($field = '', $default = '') .
находим эту строчку. и заменяем как предлагал Albert:
"Нашёл одно решение незнаю правильное оно или нет, но только так получилось в системном методе изменить код : $default = ' ' на $default = '1' в параметрах метода"
public function set_value($field = '', $default = '1')
{
if ( ! isset($this->_field_data[$field], $this->_field_data[$field]['postdata']))
{
return $default;
}
// If the data is an array output them one at a time.
// E.g: form_input('name[]', set_value('name[]');
if (is_array($this->_field_data[$field]['postdata']))
{
return array_shift($this->_field_data[$field]['postdata']);
}
return $this->_field_data[$field]['postdata'];
}
ничего менять в других файлах не пришлось. файл Menu.php остался не тронутым, как в исходнике. может кому-то актуально. теперь авторизирует как должно, без кнопки "запомнить"
Очень странно, может и правда в том, что у вас версия PHP 7.3.0 (хотя, вряд ли из-за этого). Попробуйте развернуть на php PHP 7.1.10, например, через virtual box или vmware (или на хостинге), у меня пока нет возможности попробовать развернуть на другой версии php. Проверьте еще все конфиги и настройки xampp и конфиги codeignter, может там что-то забыли настроить.
Нашёл одно решение незнаю правильное оно или нет, но только так получилось в системном методе изменить код : $default = ' ' на $default = '1' в параметрах метода
public function set_value($field = '', $default = '1')
{
if ( ! isset($this->_field_data[$field], $this->_field_data[$field]['postdata']))
{
return $default;
}
// If the data is an array output them one at a time.
// E.g: form_input('name[]', set_value('name[]');
if (is_array($this->_field_data[$field]['postdata']))
{
return array_shift($this->_field_data[$field]['postdata']);
}
return $this->_field_data[$field]['postdata'];
}