<?php
class User {
/**
* Autorizuje uživatele
*
* Pokud je již autorizován, nic se nekoná, pokud není, zkusí se automatické přihlášení s pomocí tokenu v COOKIES,
* jestliže se povede přihlásit, uživatel je autorizován, v opačném případě ho přesměrujeme na přihlašovací formulář
*
* @return void
*/
public function authorize()
{
// Uživatel není přihlášen
if(!$this->isLogged()) {
// Vyzkoušet automatické přihlášení přes token
try {
$this->autoLogin();
}
catch(Exception $e) {
// TODO:Nebudu rozepisovat, pak si to uprav, tohle je nástřel...
$actual_url = $_SERVER['REQUEST_URI'];
// Přesměrujeme na přihlášení
$this->redirect('login?message=' . $e . '&last-url=' . $actual_url);
}
}
}
/**
* Ověří, jestli je uživatel přihlášený
*
* @return bool Je uživatel přihlášený?
*/
private function isLogged()
{
// Je SESSION platný?
return isset($_SESSION['email']);
}
/**
* Automaticky přihlásí uživatele s pomocí tokenu
*
* @return bool Úspěšně přihlášen?
*
* @throws Exception Uživatel nemá platný token
*/
private function autoLogin()
{
// Získání dat pro přihlášení (nebo vrácení false -> neplatný token)
$user_data = $this->db->queryOne('
SELECT `name`, `email`, `rank`
FROM `users`
WHERE `token` = ?
', $_COOKIE['usertoken']);
// Neplatný token
if(!$user_data)
throw new Exception('unvalid-token');
// Přihlášení uživatele (nastavení dat do SESSION)
$_SESSION['name'] = $user_data['name'];
$_SESSION['email'] = $user_data['email'];
$_SESSION['rank'] = $user_data['rank'];
}
}
Comments