Exemplo n.º 1
0
 /**
  * ตรวจสอบการ 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;
     }
 }
Exemplo n.º 2
0
 /**
  * ตรวจสอบการ 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;
 }