소스 검색

Use models for authentication

ohartl 9 년 전
부모
커밋
32d0216a83
1개의 변경된 파일29개의 추가작업 그리고 38개의 파일을 삭제
  1. 29 38
      include/php/classes/Auth.php

+ 29 - 38
include/php/classes/Auth.php

@@ -42,11 +42,11 @@ class Auth
 
 
 
 
 	/**
 	/**
-	 * @param array $userData
+	 * @param AbstractModel $user
 	 */
 	 */
-	private static function loginUserByArray($userData)
+	private static function loginUserByModel($user)
 	{
 	{
-		static::$loggedInUser = new User($userData);
+		static::$loggedInUser = $user;
 	}
 	}
 
 
 
 
@@ -55,24 +55,19 @@ class Auth
 	 */
 	 */
 	private static function loginUserViaSession()
 	private static function loginUserViaSession()
 	{
 	{
-		global $_SESSION, $db;
+		global $_SESSION;
 
 
 		if(isset($_SESSION[static::SESSION_IDENTIFIER])
 		if(isset($_SESSION[static::SESSION_IDENTIFIER])
 			&& !empty($_SESSION[static::SESSION_IDENTIFIER])
 			&& !empty($_SESSION[static::SESSION_IDENTIFIER])
 		){
 		){
 			$userId = $_SESSION[static::SESSION_IDENTIFIER];
 			$userId = $_SESSION[static::SESSION_IDENTIFIER];
 
 
-			// check if user still exists in database
-			$sql = "SELECT * FROM `".DBT_USERS."` WHERE `".DBC_USERS_ID."` = '$userId' LIMIT 1;";
-			if(!$userExists = $db->query($sql)){
-				dbError($db->error);
-			}
-
-			// User exists,
-			if($userExists->num_rows === 1){
-				$userData = $userExists->fetch_assoc();
+			/** @var User $user */
+			$user = User::find($userId);
 
 
-				static::loginUserByArray($userData);
+			// check if user still exists in database
+			if(!is_null($user)){
+				static::loginUserByModel($user);
 			}
 			}
 		}
 		}
 	}
 	}
@@ -88,10 +83,7 @@ class Auth
 	 */
 	 */
 	public static function login($email, $password)
 	public static function login($email, $password)
 	{
 	{
-		global $db;
-
-		$email = $db->escape_string(strtolower($email));
-		$password = $db->escape_string($password);
+		$email = strtolower($email);
 
 
 		$emailInParts = explode("@", $email);
 		$emailInParts = explode("@", $email);
 		if(count($emailInParts) !== 2) {
 		if(count($emailInParts) !== 2) {
@@ -100,21 +92,21 @@ class Auth
 		$username = $emailInParts[0];
 		$username = $emailInParts[0];
 		$domain = $emailInParts[1];
 		$domain = $emailInParts[1];
 
 
-		// Check for user in database
-		$sql = "SELECT * FROM `".DBT_USERS."` WHERE `".DBC_USERS_USERNAME."` = '$username' AND `".DBC_USERS_DOMAIN."` = '$domain' LIMIT 1;";
-		if(!$result = $db->query($sql)){
-			dbError($db->error);
-		}
+		/** @var User $user */
+		$user = User::findWhereFirst(
+			array(
+				array(DBC_USERS_USERNAME, $username),
+				array(DBC_USERS_DOMAIN, $domain),
+			)
+		);
 
 
 		// Check if user exists
 		// Check if user exists
-		if($result->num_rows === 1){
-			$userData = $result->fetch_assoc();
-
-			if(static::checkPasswordByHash($password, $userData[DBC_USERS_PASSWORD])){
+		if(!is_null($user)){
+			if(static::checkPasswordByHash($password, $user->getPasswordHash())){
 
 
-				static::loginUserByArray($userData);
+				static::loginUserByModel($user);
 
 
-				$_SESSION[static::SESSION_IDENTIFIER] = $userData[DBC_USERS_ID];
+				$_SESSION[static::SESSION_IDENTIFIER] = $user->getId();
 
 
 				return true;
 				return true;
 			}
 			}
@@ -135,7 +127,9 @@ class Auth
 	{
 	{
 		if(static::isLoggedIn()) {
 		if(static::isLoggedIn()) {
 			$user = static::getUser();
 			$user = static::getUser();
-			return $user->getRole() === $requiredRole || $user->getRole() === User::ROLE_ADMIN;
+
+			return $user->getRole() === $requiredRole
+				|| $user->getRole() === User::ROLE_ADMIN;
 		}
 		}
 
 
 		return false;
 		return false;
@@ -213,7 +207,7 @@ class Auth
 	 *
 	 *
 	 * @return string
 	 * @return string
 	 */
 	 */
-	private static function generatePasswordHash($password)
+	public static function generatePasswordHash($password)
 	{
 	{
 		$salt = base64_encode(rand(1, 1000000) + microtime());
 		$salt = base64_encode(rand(1, 1000000) + microtime());
 		$schemaPrefix = static::getPasswordSchemaPrefix();
 		$schemaPrefix = static::getPasswordSchemaPrefix();
@@ -230,15 +224,12 @@ class Auth
 	 */
 	 */
 	public static function changeUserPassword($userId, $password)
 	public static function changeUserPassword($userId, $password)
 	{
 	{
-		global $db;
-
 		$passwordHash = static::generatePasswordHash($password);
 		$passwordHash = static::generatePasswordHash($password);
 
 
-		$userId = $db->escape_string($userId);
-		$passwordHash = $db->escape_string($passwordHash);
+		/** @var User $user */
+		$user = User::find($userId);
 
 
-		if(!$db->query("UPDATE `".DBT_USERS."` SET `".DBC_USERS_PASSWORD."` = '$passwordHash' WHERE `".DBC_USERS_ID."` = '$userId';")){
-			dbError($db->error);
-		}
+		$user->setPasswordHash($passwordHash);
+		$user->save();
 	}
 	}
 }
 }