Blogial

« Post precedente

Post successivo »


Semplice User Manager con il Model View Controller - Login -

Metti al top

La logica del login è molto semplice.Se nel database vi è una tupla con username e password, setta una sessione e inserisce lo stesso valore (uid) nel database, per verificare se l'user ha i permessi necessari controlla se nel db vi è una tupla con lo stesso uid della sessione settata in precedenza.

La classe per l'autentificazione è sviluppata direttamente nel model ed è divisa in due, una classe per il login e una classe per la verifica, come potete constatare le due classi sono molto concise, ma svolgono egregiamente, almeno penso ;), il loro compito.

UserLoginModel
Codice php:
class UserLoginModel extends UserModel{
	private $validator= null;
	public function __construct($db){
		parent::__construct($db);
		$this->setData();
    }
 	protected function setData(){
		$this->data= new UserLoginData(
								getPostValue('u_username'),
								getPostValue('u_password'),
								getUid()
		);
		$this->validator= new UserLoginValidator($this->data);
	}
	public function hasAuth(){
		if($this->validator->isValid()){
			if($this->isUser()){
				$this->update();
				securitySession(secret(),$this->data->uid);
				setSession('username',$this->data->username);
				deleteSession('invalid_login');
				if($this->isAdmin()){
					redirect('admin.php');
				}
				redirect('index.php');
			}
			else{
				setSession('invalid_login',INVALID_LOGIN);
				redirect('login.php');
			}
		}
		else{
			setSession('invalid_login',INVALID_LOGIN);
			redirect('login.php');
		}
	}
	protected function isUser(){
		$sql= "SELECT COUNT(user_ID) FROM users WHERE user_name=:username 
		&& user_password=MD5(:password) && user_confirm='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':username'=>$this->data->username,
					':password'=>$this->data->password
				);
		$sth->execute($excute);
		return (bool)$sth->fetchColumn();
	}
	protected function isAdmin(){
		$sql= "SELECT COUNT(user_ID) FROM users WHERE user_name=:username 
		&& user_password=MD5(:password) && user_confirm='1' && user_is_admin='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':username'=>$this->data->username,
					':password'=>$this->data->password
				);
		$sth->execute($excute);
		return (bool)$sth->fetchColumn();
	}
	private function update(){
		$sql="UPDATE users SET user_uid=:uid WHERE user_name=:username && 
		user_password=MD5(:password) && user_confirm='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':uid'=>$this->data->uid,
					':username'=>$this->data->username,
					':password'=>$this->data->password
				);
		$sth->execute($excute);
	}
}
UserCheckModel
Codice php:
class UserCheckModel extends UserModel{
	public function __construct($db){
		parent::__construct($db);
		$this->setData();
    } 
	protected function setData(){
		$this->data= new UserCheckData(getSession(secret()));
	}
	public function hasAuth(){
		$sql= "SELECT COUNT(user_ID) FROM users WHERE user_uid=:uid
		&& user_confirm='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':uid'=>$this->data->uid
				);
		$sth->execute($excute);
		return (bool)$sth->fetchColumn();
	}
	public function isAdmin(){
		$sql= "SELECT COUNT(user_ID) FROM users WHERE user_uid=:uid
		&& user_confirm='1' && user_is_admin='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':uid'=>$this->data->uid
				);
		$sth->execute($excute);
		return (bool)$sth->fetchColumn();
	}
	public function getDetails(){
		$sql= "SELECT user_nick AS nick, user_name AS username,user_password AS password,
		user_email AS email FROM users WHERE user_uid=:uid LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':uid'=>$this->data->uid
				);
		$sth->execute($excute);
		return $sth->fetch(PDO::FETCH_OBJ);
	}
	public function reset($newUid){
		$sql="UPDATE users SET user_uid=:nuid WHERE user_uid=:uid 
		&& user_confirm='1' LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(
					':nuid'=>$newUid,
					':uid'=>$this->data->uid
					);
		$sth->execute($excute);
	}
	public function logOut(){
		$this->reset(getUid());
		deleteSession(secret());
		deleteSession('username');
	}
}

Il metodo logOut oltre a cancellare tutte le sessioni coinvolte nel processo, resetta l'uid con un nuovo valore.

Conclusioni

Puoi scaricare il nuovo modulo qui.Nel prossimo articolo parlerò del reset della password.

Inserisci il tuo commento

Inserisci il codice che leggi nell'immagine

antispam

Nb.
Devi avere i cookie abilitati per commentare l'articolo.
I commenti saranno soggetti ad approvazione da parte dell'administrator.

Gli articoli in evidenza

Php Trouble Tickets

Metti al top

Script opensource php mysql per la gestione delle richieste degli utenti tramite ticket.

Si tratta di un software gratuito che gira su piattaforme Linux, Windows (Apache).

Permette la completa gestione dei rapporti commerciali, tra voi e i vostri clienti, attraverso il sistema basato sui trouble tickets.

Distribuito sotto licenza MIT ha le seguenti caratteristiche:

  • - Valid css e xhtml strict;
  • - unobtrusive javascript utilizzando il framework jQuery;
  • - multilanguages;
  • - aggiungi/edita/cancella/chiudi/assegna trouble tickets e risposte;
  • - nessuna limitazione sul numero di utenti, amministratori e staff di supporto;
  • - permessi agli operatori, accesso separato utenti;
  • - gruppi di operatori con gestione permessi (CRUD);
  • - illimitate e nested categories;
  • - paging;
  • - moduli di ricerca;
  • - tables sortable;
  • - nessun limite sul numero di TT creabili.

Potete visionare una demo qui.