Exemplo n.º 1
0
function common_remembered_user()
{
    $user = null;
    $packed = isset($_COOKIE[REMEMBERME]) ? $_COOKIE[REMEMBERME] : null;
    if (!$packed) {
        return null;
    }
    list($id, $code) = explode(':', $packed);
    if (!$id || !$code) {
        common_log(LOG_WARNING, 'Malformed rememberme cookie: ' . $packed);
        common_forgetme();
        return null;
    }
    $rm = Remember_me::getKV('code', $code);
    if (!$rm) {
        common_log(LOG_WARNING, 'No such remember code: ' . $code);
        common_forgetme();
        return null;
    }
    if ($rm->user_id != $id) {
        common_log(LOG_WARNING, 'Rememberme code for wrong user: '******' != ' . $id);
        common_forgetme();
        return null;
    }
    $user = User::getKV('id', $rm->user_id);
    if (!$user instanceof User) {
        common_log(LOG_WARNING, 'No such user for rememberme: ' . $rm->user_id);
        common_forgetme();
        return null;
    }
    // successful!
    $result = $rm->delete();
    if (!$result) {
        common_log_db_error($rm, 'DELETE', __FILE__);
        common_log(LOG_WARNING, 'Could not delete rememberme: ' . $code);
        common_forgetme();
        return null;
    }
    common_log(LOG_INFO, 'logging in ' . $user->nickname . ' using rememberme code ' . $rm->code);
    common_set_user($user);
    common_real_login(false);
    // We issue a new cookie, so they can log in
    // automatically again after this session
    common_rememberme($user);
    return $user;
}