Codeigniter, код tank_auth не работает после перехода на новый сервер - PullRequest
1 голос
/ 26 марта 2012

После перехода на новый сервер я получаю множество таких уведомлений:

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: account/settings.php

Line Number: 28

account/settings.php view @line 28 содержимое:

echo $user->description;

Везде появляется ошибка. Я пытаюсь получить информацию из переменной $user. Я думаю, это связано с tank_auth: я передаю $user данные через контроллер:

$data['user'] = $this->tank_auth->user();
[..]
$this->load->view('account/settings', $data);

... и я вошел в систему.

Мой путь к каталогам точно такой же, как и на предыдущем сервере .

Где проблема?

1 Ответ

4 голосов
/ 26 марта 2012

это, вероятно, потому что у вас установлен хэш сервера, не переносимый ..

Строки 13-23 в application/config/tank_auth.php

/*
|--------------------------------------------------------------------------
| Security settings
|
| The library uses PasswordHash library for operating with hashed passwords.
| 'phpass_hash_portable' = Can passwords be dumped and exported to another server. If set to FALSE then you won't be able to use this database on another server.
| 'phpass_hash_strength' = Password hash strength.
|--------------------------------------------------------------------------
*/
## Set this to TRUE
$config['phpass_hash_portable'] = FALSE;
$config['phpass_hash_strength'] = 8;

Линии 203-235 application/libraries/phpass-0.1/PasswordHash.php

на тот случай, если вам интересно, где этот конфиг вступает в игру, в создании хэша blowfish:

function HashPassword($password)
{
    $random = '';

    if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) {
        $random = $this->get_random_bytes(16);
        $hash =
            crypt($password, $this->gensalt_blowfish($random));
        if (strlen($hash) == 60)
            return $hash;
    }

    if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) {
        if (strlen($random) < 3)
            $random = $this->get_random_bytes(3);
        $hash =
            crypt($password, $this->gensalt_extended($random));
        if (strlen($hash) == 20)
            return $hash;
    }

    if (strlen($random) < 6)
        $random = $this->get_random_bytes(6);
    $hash =
        $this->crypt_private($password,
        $this->gensalt_private($random));
    if (strlen($hash) == 34)
        return $hash;

    # Returning '*' on error is safe here, but would _not_ be safe
    # in a crypt(3)-like function used _both_ for generating new
    # hashes and for validating passwords against existing hashes.
    return '*';
}

Если это не решит проблему

попробуй print_r($user); что вернется?

...