/** * ตรวจสอบการ login เมื่อมีการเรียกใช้ class new Login * action=logout ออกจากระบบ * มาจากการ submit ตรวจสอบการ login * ถ้าไม่มีทั้งสองส่วนด้านบน จะตรวจสอบการ login จาก session และ cookie ตามลำดับ * * @return \static */ public static function create() { // create class $login = new static(); // การเข้ารหัส $pw = new Password(self::$cfg->password_key); // ชื่อฟิลด์สำหรับการรับค่าเป็นรายการแรกของ login_fields $field_name = reset(self::$cfg->login_fields); // อ่านข้อมูลจากฟอร์ม login ฟิลด์ login_username self::$text_username = self::$request->post('login_username', null)->toString(); if (self::$text_username === null) { if (isset($_SESSION['login']) && isset($_SESSION['login'][$field_name])) { // from session self::$text_username = $_SESSION['login'][$field_name]; } else { // from cookie $datas = self::$request->getCookieParams(); self::$text_username = isset($datas['login_username']) ? $pw->decode($datas['login_username']) : null; } $login->from_submit = false; } else { $login->from_submit = true; } self::$text_username = Text::username(self::$text_username); // ค่าที่ส่งมา self::$text_password = $login->get('password', $pw); $login_remember = $login->get('remember', $pw) == 1 ? 1 : 0; // ตรวจสอบการ login if (self::$request->get('action')->toString() === 'logout' && !$login->from_submit) { // logout ลบ session และ cookie unset($_SESSION['login']); $time = time(); setCookie('login_username', '', $time, '/'); setCookie('login_password', '', $time, '/'); self::$login_message = Language::get('Logout successful'); } elseif (self::$request->post('action')->toString() === 'forgot') { // ตรวจสอบอีเมล์สำหรับการขอรหัสผ่านใหม่ return $login->forgot(self::$request); } else { // ตรวจสอบค่าที่ส่งมา if (self::$text_username == '') { if ($login->from_submit) { self::$login_message = Language::get('Please fill out this form'); self::$login_input = 'login_username'; } } elseif (self::$text_password == '') { if ($login->from_submit) { self::$login_message = Language::get('Please fill out this form'); self::$login_input = 'login_password'; } } elseif (!$login->from_submit || $login->from_submit && self::$request->isSafe()) { // ตรวจสอบการ login กับฐานข้อมูล $login_result = $login->checkLogin(self::$text_username, self::$text_password); if (is_string($login_result)) { // ข้อความผิดพลาด self::$login_input = self::$login_input == 'password' ? 'login_password' : 'login_username'; self::$login_message = Language::get($login_result); // logout ลบ session และ cookie unset($_SESSION['login']); $time = time(); setCookie('login_username', '', $time, '/'); setCookie('login_password', '', $time, '/'); } else { // save login session $login_result['password'] = self::$text_password; $_SESSION['login'] = $login_result; // save login cookie $time = time() + 2592000; if ($login_remember == 1) { setcookie('login_username', $pw->encode(self::$text_username), $time, '/'); setcookie('login_password', $pw->encode(self::$text_password), $time, '/'); setcookie('login_remember', $login_remember, $time, '/'); } setcookie('login_id', $login_result['id'], $time, '/'); } } return $login; } }
/** * ตรวจสอบการ login เมื่อมีการเรียกใช้ class new Login * action=logout ออกจากระบบ * มาจากการ submit ตรวจสอบการ login * ถ้าไม่มีทั้งสองส่วนด้านบน จะตรวจสอบการ login จาก session และ cookie ตามลำดับ * * @return \Login */ public static function create() { $obj = new static(); // ค่าที่ส่งมา $save = Input::filter($_POST); // ตรวจสอบการ login if (Input::get($_GET, 'error') === 'EMAIL_EXISIS') { // facebook login error มี email อยู่แล้ว self::$login_message = Language::get('This email is already registered'); } elseif (empty($save) && Input::get($_GET, 'action') === 'logout') { // logout ลบ session และ cookie unset($_SESSION['login']); $time = time(); setCookie('login_email', '', $time, '/'); setCookie('login_password', '', $time, '/'); self::$login_message = Language::get('Logout successful'); } elseif (isset($save['action']) && $save['action'] === 'forgot') { // ลืมรหัสผ่าน return $obj->forgot(); } else { // ตรวจสอบค่าที่ส่งมา if (isset($save['remember'])) { $login_remember = $save['remember']; } elseif (isset($_COOKIE['login_remember'])) { $login_remember = $_COOKIE['login_remember'] == 1 ? 1 : 0; } else { $login_remember = 0; } $pw = new Password(Config::create()->get('password_key')); foreach (array('login_email', 'login_password') as $name) { $key = str_replace('login_', '', $name); if (!isset($save[$key])) { foreach (array($_SESSION, $_COOKIE) as $var) { if (isset($var[$name])) { if ($var == $_COOKIE) { ${$name} = $pw->decode($var[$name]); } else { ${$name} = trim($var[$name]); } break; } } } else { ${$name} = $save[$key]; } } } if (isset($login_email) && isset($login_password)) { self::$text_email = $login_email; self::$text_password = $login_password; // ตรวจสอบการกรอก if (empty($login_email)) { self::$login_message = Language::get('Please fill out') . ' ' . Language::get('Email'); self::$login_input = 'text_email'; } elseif (empty($login_password)) { self::$login_message = Language::get('Please fill out') . ' ' . Language::get('Password'); self::$login_input = 'text_password'; } else { // ตรวจสอบการ login กับฐานข้อมูล $login_result = $obj->checkLogin($login_email, $login_password); if (is_string($login_result)) { // ข้อความผิดพลาด self::$login_input = $login_result == 'Incorrect password' ? 'text_password' : 'text_email'; self::$login_message = Language::get($login_result); } else { // save login session foreach ($login_result as $key => $value) { $_SESSION['login'][$key] = $value; } $_SESSION['login']['password'] = $login_password; // save login cookie $time = time() + 2592000; // password $pw = new Password(self::$cfg->password_key); if ($login_remember == 1) { setcookie('login_email', $pw->encode($login_result->email), $time, '/'); setcookie('login_password', $pw->encode($login_password), $time, '/'); setcookie('login_remember', $login_remember, $time, '/'); } setcookie('login_id', $login_result->id, $time, '/'); } } } // คืนค่า \Login return $obj; }