Como hacer un sistema de login por sessiones con Seed php - parte 1

blog-post

En los posts anteriores te estuve mostrando como hacer un admin con jQuery y Seed PHP, y como optimizar el código creando una clase de modelo de datos para que sea ordenado y reusable. Hoy vamos a ver como empezar a hacer un sistema de login por sessiones creando un hook que revise los datos de usuario y se ejecute antes del código de cada petición.

Quería terminar la parte del login completa, pero al hacerse más largo de lo que pensaba lo separé en 2 partes: la primera va a incluír la clase de modelo para obtener los datos del usuario y de autorización que lo llama para consultar si los datos del usuario son verdaderos. Y en el próximo post voy a sumar el código del hook que ejecute esta validación.
Además hice estos cambios para optimizar el código anterior:

-Termine de comentar el código de las hojas de estilo

-Comenté el código del html

-Modifiqué el manejo de la creación de slugs, porque había un problema con algunas teclas que generaban caractéres invisibles

-Guardé en el archivo config.php algunos datos sobre metatags del sitio para obtenerlos desde las vistas

-Corregí algunos errores en el manejo de sessiones y reduje algunos métodos para que puedan manejarse desde solo uno

-Comenté lo que faltaba del código css

El código de la clase auth que va a loggear y revisar si está loggeado el usuario es este:


seed = $seed;
		$this->user_model = new User_Model($seed);
	}
	
	//revisa si los datos ingresados por el usuario
	//estan registrados en la base de datos
	public function login($user, $pass){
		//si lo están devuelvo true
		if($this->user_model->login($user, $pass)){
			return true;
		}
		//sino false
		return false;
	}
	
	//revisa si el usuario está logueado
	public function checkAuth(){
		//si el usuario esta logueado
		//lo almaceno en la variable de session
		if($user = $this->seed->session()){
			//y lo devuelvo
			return $user;
		}
		//sino devuelvo false
		return false;
	}
	
	//desloguea al usuario
	public function logout(){
		$this->seed->session(false);
	}

}

?>

Para obtener los datos de mysql la clase Auth llama al modelo User:


get('db'));
		$this->seed = $seed;
	}

    public function login($username, $password){
	   $query = "SELECT * FROM users WHERE username = '".$username."' LIMIT 1";

        $user = $this->db->query($query);

        $user = count($user) > 0 ? $user[0] : null;
		
		//si encuentro el usuario
        if(!empty($user)){
			//y el password en formato md5 es igual al de la base de datos
			if(md5($password)==$user['password']){
				//guardo los datos en la session
				$this->seed->session('user', $user['username']);
				//y devuelvo true para informarlo
				return true;
			}else{
				//si el password no coincide devuelvo false
				return false;
			}
		}
		//si no encuentro el usuario también devuelvo false
		return false;
	}
	
}
?>

Antes de probar el ejemplo hace falta volver a cargar la base de datos de la carpeta data, porque agregué una tabla para almacenar los datos del usuario. Por último te dejo el link del ejemplo con todos los cambios hasta el momento. Espero que te guste, abrazon!