diff --git a/application/controllers/Login.php b/application/controllers/Login.php index 6165772..23908d4 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -25,7 +25,8 @@ $_SESSION['loggedOut'] = false; $rememberMe = isset($_POST['rememberMe']) ? $_POST['rememberMe'] : 'off'; $this->LoginModel->login($_POST['loginname'], $_POST['loginPassword'], $rememberMe); - isset($_GET['r']) && !empty($_GET['r']) ? redirect(base64_decode($_GET['r'])) : redirect(base_url('login')); + + isset($_GET['r']) && !empty($_GET['r']) ? redirect(base64_decode(urldecode($_GET['r']))) : redirect(base_url('login')); } $notice = isset($_SESSION['notice']) ? $_SESSION['notice'] : ''; @@ -141,13 +142,11 @@ public function logout() { - unset($_SESSION['user']); - $this->load->helper('cookie'); -// delete_cookie('rememberMe'); -// delete_cookie('token'); - $notice = '
Abgemeldet! Du wurdest erfolgreich abgemeldet! Ich hoffe wir sehen uns bald wieder.
'; + $this->LoginModel->logout(); + + $notice = '
Abgemeldet! Du wurdest erfolgreich abgemeldet! Ich hoffe, wir sehen uns bald wieder.
'; $_SESSION['notice'] = $notice; - $_SESSION['loggedOut'] = true; + $redirect = isset($_GET['redirect']) ? urldecode(base64_decode($_GET['redirect'])) : base_url("login"); redirect($redirect); } diff --git a/application/models/LoginModel.php b/application/models/LoginModel.php index 8309fd5..b61a827 100644 --- a/application/models/LoginModel.php +++ b/application/models/LoginModel.php @@ -37,6 +37,17 @@ } } + public function logout() { + delete_cookie('rememberMe'); + delete_cookie('rememberToken'); + + $userID = $_SESSION['user']['ID']; + $this->db->query('UPDATE users SET isCurrentlyOnline = false, rememberToken = null WHERE ID = ?', [$userID]); + + unset($_SESSION['user']); + $_SESSION['loggedOut'] = true; + } + public function getLoginData($username) { $this->db->cache_off(); @@ -53,6 +64,12 @@ return $passwordHash; } + private function generateRandomUserHash($username) { + $base = uniqid(); + $seed = $username . date(time()); + return md5($base . $seed); + } + public function startLoginSession($logindata, $rememberMe) { $this->reloadLoginSession($logindata); @@ -61,20 +78,14 @@ if ($rememberMe == 'on') { $expire = 3600 * 24 * 60; - $userHash = $this->LoginModel->getUserHash($logindata['username'], $logindata['password'], $logindata['email'], $logindata['ID']); -// $this->input->set_cookie('rememberMe', base64_encode($logindata['username']), $expire, base_url(), '/'); -// $this->input->set_cookie('token', $userHash, $expire, base_url(), '/'); + $userHash = base64_encode($logindata['username']); + $loginHash = $this->generateRandomUserHash($userHash); + $this->db->query('UPDATE users SET rememberToken = ? WHERE ID = ?', [$loginHash, $logindata['ID']]); - var_dump(get_cookie('rememberMe')); + $domain = explode('/', base_url())[2]; - echo 'fresh'; - var_dump($_COOKIE); - $_COOKIE['rememberMe'] = base64_encode($logindata['username']); - $_COOKIE['token'] = $userHash; - echo 'tech'; -// var_dump(get_cookie('rememberMe')); -// var_dump(get_cookie('token')); - var_dump($_COOKIE); + $this->input->set_cookie('rememberMe', $userHash, $expire, $domain, '/'); + $this->input->set_cookie('rememberToken', $loginHash, $expire, $domain, '/'); } } @@ -143,28 +154,20 @@ if (isset($_SESSION['loggedOut']) && $_SESSION['loggedOut']) { return; } - var_dump('test'); - if (!isset($_SESSION['user']) && isset($_COOKIE['rememberMe']) && isset($_COOKIE['token'])) { - var_dump($_COOKIE); + if (!isset($_SESSION['user']) && isset($_COOKIE['rememberMe']) && isset($_COOKIE['rememberToken'])) { $logindata = $this->getLoginData(base64_decode($_COOKIE['rememberMe'])); if (!empty($logindata)) { $logindata = $logindata[0]; - $token = $this->getUserHash($logindata['username'], $logindata['password'], $logindata['email'], $logindata['ID']); + $result = $this->db->query('SELECT rememberToken FROM users WHERE ID = ?', [$logindata['ID']])->result_array(); + $token = $result[0]['rememberToken']; - if ($_COOKIE['token'] == $token) { - echo '
TEST!
'; + if ($token !== null && sizeof($token) == 32 && $_COOKIE['rememberToken'] == $token) { $this->startLoginSession($logindata, 'on'); } } } } - public function getUserHash($username, $password, $email, $id) - { - $hash = hash('sha256', $id . '//' . $username . '//' . substr($password, 0, 5) . '//' . substr($email, 0, 5)); - return $hash; - } - public function hashMailExists($emailHash, $activation_key) { $results = $this->db->query('SELECT ID FROM users WHERE MD5(email) = ? AND is_activated = 0 AND activation_key = ?', [$emailHash, $activation_key])->result_array();