<?php class LoginClass extends DBController { // class 자식클래스 extends 부모클래스 // override : 부모 클래스와 자식 클래스가 같은 메소드를 정의했을 경우 자식 클래스가 우선시된다.
public function hashSSHA($password) {
$salt = sha1(rand()); $salt = substr($salt, 0, 10); $encrypted = base64_encode(sha1($password . $salt, true) . $salt); $hash = array("salt" => $salt, "encrypted" => $encrypted); return $hash; }
public function checkhashSSHA($salt, $password) { $hash = base64_encode(sha1($password . $salt, true) . $salt); return $hash; }
// 회원 정보 신규 입력 public function storeUser($userID, $userNM, $password, $mobileNO) { $hash = $this->hashSSHA($password); $encrypted_password = $hash['encrypted']; // encrypted password $salt = $hash['salt']; // salt $regdate = date("YmdHis");
$stmt = $this->db->prepare("INSERT INTO members(userID, userNM, passwd, salt, regdate) VALUES(?, ?, ?, ?, ?)"); $stmt->bind_param("sssss", $userID, $userNM, $encrypted_password, $salt,$regdate); $result = $stmt->execute(); $stmt->close();
// check for successful store if ($result) { $user = $this->getUser($userID, $password); //echo '<pre>';print_r($user);echo '</pre>'; $rs = $this->storeUserDetail($user['uid'],$userNM,$userID,$mobileNO); if($rs == 1){ return $user; } else { return -1; } } else { return -1; // 0 } }
// 회원 세부 정보 입력 public function storeUserDetail($relateduid,$userNM,$email,$mobileNO){ $mobileNO = preg_replace("/[^0-9]/", "", $mobileNO); //전화번호 숫자만 남기고 제거 $sql ="INSERT INTO member_data(relateduid,userNM,email,mobileNO) VALUES(?, ?, ?, ?)"; $stmt = $this->db->prepare($sql); $stmt->bind_param("isss", $relateduid, $userNM, $email, $mobileNO); $result = $stmt->execute(); $stmt->close(); if($result){ return 1; } else { return 0; } }
// 로그인 체크 public function getUser($userID, $password) { $stmt = $this->db->prepare("SELECT * FROM members WHERE userID = ?"); $stmt->bind_param("s", $userID);
if ($stmt->execute()) { $user = $stmt->get_result()->fetch_assoc(); $stmt->close();
// verifying user password $salt = $user['salt']; $encrypted_password = $user['passwd']; $hash = $this->checkhashSSHA($salt, $password); // check for password equality if ($encrypted_password == $hash) { // user authentication details are correct return $user; } } else { return NULL; } }
// 안드로이드/아이폰 로그인 체크 public function LoginUserChk($userID,$password,$deviceID){ if(empty($userID) || empty($password)){ return 0; } else { $user = $this->getUser($userID, $password); if($user['uid']>0){ // 가입자 정보가 있다면 // 장치 일련번호 체크 if($user['phoneSE'] == NULL){ // 신규 장치번호 입력(최초 로그인) $this->LoginUserEquipInput($userID,$deviceID); return 1; } else { if($user['phoneSE'] === $deviceID){ return 1; // 일련번호 일치 } else { return -1; //일련번호 불일치 } } } else { return 0; // 로그인 실패 } }
}
// 장치번호 업데이트 public function LoginUserEquipInput($userID,$deviceID){ if(strlen($deviceID)>0 && is_numeric($deviceID)){ // 안드로이드폰 $ostype = 2; } else if(strlen($deviceID)>30){ // 아이폰 $ostype = 1; } else { // 기타 $ostype = 0; }
$sql='update members set phoneSE=?, OStype=? where userID=?'; $stmt = $this->db->prepare($sql); $stmt->bind_param("sss", $deviceID, $ostype, $userID); $status = $stmt->execute(); if($status == true){ return 1; } else { return 0; } }//end
// 장치번호 초기화 (관리자용) public function EquipReset($userID){ $ostype = 0; $sql='update members set phoneSE=NULL, OStype=? where userID=?'; $stmt = $this->db->prepare($sql); $stmt->bind_param("ss", $ostype, $userID); $status = $stmt->execute(); if($status == true){ return 1; } else { return 0; } }//end
// 회원 가입 여부 체크 public function isUserExisted($userID) { $stmt = $this->db->prepare("SELECT userID from members WHERE userID = ?");
$stmt->bind_param("s", $userID); $stmt->execute(); //$stmt->store_result(); $result = $stmt->get_result();
if ($result->num_rows > 0) { // user existed $stmt->free_result(); $stmt->close(); return true; } else { // user not existed $stmt->free_result(); $stmt->close(); return false; } }
// 회원 정보 삭제 public function deleteUser($userID){ $stmt = $this->db->prepare("delete FROM members WHERE userID = ?"); $stmt->bind_param("s", $userID); $stmt->execute(); $stmt->close(); }
// 인증이 성공한 상태에서 직접 접속을 시도하는 외부 접속으로부터 보호 function checkReferer($url) { $referer = $_SERVER['HTTP_REFERER']; $res = strpos($referer,$url); return $res == 0 ? false : true; } } ?> |