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.