ceskyDJ

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

Oct 7th, 2016
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.01 KB | None | 0 0
  1. <?php
  2.  
  3. class User {
  4.  
  5.     /**
  6.      * Autorizuje uživatele
  7.      *
  8.      * Pokud je již autorizován, nic se nekoná, pokud není, zkusí se automatické přihlášení s pomocí tokenu v COOKIES,
  9.      * 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ář
  10.      *
  11.      * @return void
  12.      */
  13.     public function authorize()
  14.     {
  15.         // Uživatel není přihlášen
  16.         if(!$this->isLogged()) {
  17.             // Vyzkoušet automatické přihlášení přes token
  18.             try {
  19.                 $this->autoLogin();
  20.             }
  21.             catch(Exception $e) {
  22.                 // TODO:Nebudu rozepisovat, pak si to uprav, tohle je nástřel...
  23.                 $actual_url = $_SERVER['REQUEST_URI'];
  24.  
  25.                 // Přesměrujeme na přihlášení
  26.                 $this->redirect('login?message=' . $e . '&last-url=' . $actual_url);
  27.             }
  28.         }
  29.     }
  30.  
  31.     /**
  32.      * Ověří, jestli je uživatel přihlášený
  33.      *
  34.      * @return bool Je uživatel přihlášený?
  35.      */
  36.     private function isLogged()
  37.     {
  38.         // Je SESSION platný?
  39.         return isset($_SESSION['email']);
  40.     }
  41.  
  42.     /**
  43.      * Automaticky přihlásí uživatele s pomocí tokenu
  44.      *
  45.      * @return bool Úspěšně přihlášen?
  46.      *
  47.      * @throws Exception Uživatel nemá platný token
  48.      */
  49.     private function autoLogin()
  50.     {
  51.         // Získání dat pro přihlášení (nebo vrácení false -> neplatný token)
  52.         $user_data = $this->db->queryOne('
  53.            SELECT `name`, `email`, `rank`
  54.            FROM `users`
  55.            WHERE `token` = ?
  56.          ', $_COOKIE['usertoken']);
  57.  
  58.         // Neplatný token
  59.         if(!$user_data)
  60.             throw new Exception('unvalid-token');
  61.  
  62.         // Přihlášení uživatele (nastavení dat do SESSION)
  63.         $_SESSION['name'] = $user_data['name'];
  64.         $_SESSION['email'] = $user_data['email'];
  65.         $_SESSION['rank'] = $user_data['rank'];
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment