Blogial

« Post precedente

Post successivo »


Semplice User Manager con il Model View Controller - Reset della password -

Metti al top

Può sempre accadere che un ns. utente non ricordi la sua password, quindi è necessario sviluppare un modulo per permettergli il recupero, o meglio, avendo utilizzato md5, che non è reversibile, il reset di quest'ultima.

Nel modulo cambia password, viene richiesto in input l'email dell'utente (si spera che almeno la sua email la ricordi ;) ) e se nel database è presente un record contente questo valore, aggiorniamo l'uid ed inviamo una email con un link per accedere al modulo reset password che si incaricherà del reset vero e proprio.

Dopo aver controllato che il valore passato tramite GET esista, mostriamo il modulo per il reset della password. Facciamo di nuovo inserire per maggiore sicurezza l'email, e diamo all'utente la possibilità di scegliere la sua nuova password.

Aggiorniamo l'uid e spediamo tramite email i nuovi valori fornendo un link per il login.

L'unica cosa degna di nota è presente nella classe UserResetModel in cui si effettua una query per recuperare nickname e username ed assegnarli alla proprietà data della classe UserResetData.

UserResetModel
Codice php:
class UserResetModel extends UserModel{
	private $validator= null;
	private $mail= null;
	public function __construct($db){
		parent::__construct($db);
		$this->setData();
    } 
	protected function setData(){
		$this->data= new UserResetData(
						getPostValue('u_email'),
						getPostValue('u_password'),
						getGetValue('u')
					);
		 $this->validator= new UserResetValidator($this->data);
	}
	public function getView(){
		if($this->validator->isValid()){
			$nuid= getUid();
			if($this->reset($nuid)){
				refresh('login.php');
				deleteSession('email');
				$this->username($nuid);
 				$this->mail= new UserResetMail($this->data);
				$this->mail->send();
				return new UserConfirmView(SENT_EMAIL_RESET);
			}
			else{
				refresh('login.php');
				deleteSession('email');
				return new UserErrorView(array(NOT_RESET_YET));
			}
		}
		else{
			refresh('reset.php?u='.$this->data->uid);
			setSession('email',$this->data->email);
			return new UserErrorView($this->validator->getErrors());
		}
	}
	private function reset($nuid){
		$sql= "UPDATE users SET user_password=";
 		$sql.= "MD5(".$this->db->quote($this->data->password)."),";
		$sql.= "user_uid=".$this->db->quote($nuid);
		$sql.= " WHERE user_email=".$this->db->quote($this->data->email);
		$sql.= " && user_uid=".$this->db->quote($this->data->uid);
 		$sql.= " && user_confirm='1' LIMIT 1";
		return (bool)$this->db->exec($sql);
	}
	public function username($nuid){
		// Con questo metodo recuperiamo nickname e username
		// da spedire via email
		$sql= "SELECT user_nick AS nick,user_name AS username FROM users 
		WHERE user_uid=:uid LIMIT 1";
		$sth= $this->db->prepare($sql);
		$excute= array(':uid'=>$nuid);
		$sth->execute($excute);
		$result= $sth->fetch(PDO::FETCH_OBJ);
		$this->data->nickname= $result->nick;
		$this->data->username= $result->username;
	}
}

Ultima cosa che voglio farvi notare è l'utilizzo, nel blocco try e catch, della funzione error_log, che spedisce una email con l'errore che si è verificato all'admin e l'uso di un redirect che mostra all'utente, una pagina di errore appositamente costruita.

Blocco try e catch
Codice php:
try{
	$userResetController= new UserResetController($db);
	echo $userResetController->getPage();
	$db= null;
}
catch(InvalidArgException $e){
	error_log($e->getMessage(), 1,WARN_MAIL);
	redirect('error.php');
}
catch(PDOException $e){
	error_log($e->getMessage(), 1,WARN_MAIL);
	redirect('error.php');
}
catch(MailException $e){
   	error_log($e->getMessage(), 1,WARN_MAIL);
	redirect('error.php');
}
Conclusioni

Questa lunga serie di tutorials per implementare un semplice User Manager con il Model View Controller è terminata spero vi sia piaciuta.

Aspetto fiducioso un vs. feed back. Alla prossima ;).

Puoi scaricare l'intero script qui.

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.