ceskyDJ icon

Kontrola přihlášení a automatické přihlášení

ceskyDJ | PRO | 10/07/16 03:31:43 PM UTC | 0 ⭐ | 290 👁️ | Never ⏰ | []
PHP |

2.01 KB

|

None

|

0 👍

/

0 👎

<?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