63 lines
1.7 KiB
PHP
63 lines
1.7 KiB
PHP
|
|
<?php
|
||
|
|
namespace Vor\application\user;
|
||
|
|
|
||
|
|
use Vor\core\Sys;
|
||
|
|
use Vor\core\Main;
|
||
|
|
use Exception;
|
||
|
|
|
||
|
|
class Auth{
|
||
|
|
public $username;
|
||
|
|
public $email;
|
||
|
|
public $password;
|
||
|
|
|
||
|
|
public static function isAuth(){
|
||
|
|
$authData = $_SERVER['VOR_AUTH'] ?? false;
|
||
|
|
|
||
|
|
if(!$authData){
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
return (int)Sys::session('uid') === (int)$authData['uid'];
|
||
|
|
}
|
||
|
|
|
||
|
|
public function login(){
|
||
|
|
if(isset($this->email) && isset($this->password)){
|
||
|
|
$userData = Main::select('users', ['email', 'username', 'password', 'id'], ['email' => trim($this->email)]);
|
||
|
|
if(!$userData){
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(password_verify($this->password, $userData['password'])){
|
||
|
|
$sid = bin2hex(random_bytes(16));
|
||
|
|
|
||
|
|
$payload = [
|
||
|
|
'uid' => (int)$userData['id'],
|
||
|
|
'sid' => $sid,
|
||
|
|
'exp' => time() + 86400
|
||
|
|
];
|
||
|
|
|
||
|
|
if(Sys::cookieSet('v_auth', $payload)){
|
||
|
|
Sys::validateSession($sid);
|
||
|
|
|
||
|
|
Sys::session('uid', (int)$userData['id']);
|
||
|
|
Sys::session('logged_in_at', time());
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function logout(){
|
||
|
|
Sys::cookieClear('v_auth');
|
||
|
|
if(session_status() === PHP_SESSION_ACTIVE){
|
||
|
|
session_unset();
|
||
|
|
session_destroy();
|
||
|
|
}
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
?>
|