Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Auth
- {
- protected $_session;
- protected static $_instance;
- protected function __construct()
- {
- // Hämta en sessionsinstans
- $this->_session = Session::instance();
- // Auto-login
- $this->auto_login();
- }
- /**
- * Skapar en instans eller returnerar en existerande instans av Auth
- *
- * @return Auth
- */
- public static function instance()
- {
- if ( ! Auth::$_instance)
- {
- Auth::$_instance = new Auth;
- }
- return Auth::$_instance;
- }
- /**
- * Avslutar ett loginförsök genom att spara information i kaka och session
- *
- * @param array användarinformation
- * @return Auth $this
- */
- protected function complete_login(Model_User $user, $remember = FALSE)
- {
- if ($remember)
- {
- // Skapa posten i databasen
- $values = Model_User_Token::factory()->create($user->id)->values();
- // Skapa kakan
- setcookie('auth_autologin_token', $values['token'], $values['expire']);
- }
- // Spara användaren
- $this->_session->auth = $user->values();
- // En högre privilegienivå: generera nytt sessionsid
- session_regenerate_id();
- return $this;
- }
- /**
- * Försöker autologgain en användare baserat på en kaka.
- *
- * @return bool `true` om inloggningen lyckades
- */
- public function auto_login()
- {
- // Kontrollera om token finns
- if (empty($_COOKIE['auth_autologin_token']))
- {
- return FALSE;
- }
- $token = $_COOKIE['auth_autologin_token'];
- // Kolla om den är giltig
- $token = Model_User_Token::factory($token);
- if ( ! $token->loaded())
- {
- // Finns inte eller har gått ut
- return FALSE;
- }
- // Hämta användaren
- $user = Model_User::factory($token->user_id);
- // Skapa kaka och spara informationen i sessionen
- $this->complete_login($user, TRUE);
- return TRUE;
- }
- /**
- * Returnerar sant om användaren är inloggad
- *
- * @return bool
- */
- public function logged_in()
- {
- return isset($this->_session->auth);
- }
- /**
- * Försöker logga in en användare med användarnamn och lösenord
- *
- * @param string username
- * @param string password
- * @param bool remember (default: false)
- * @return bool
- */
- public function login($username, $password, $remember = FALSE)
- {
- if ($this->logged_in())
- {
- trigger_error('Redan inloggad', E_USER_ERROR);
- return FALSE;
- }
- // Hämta login-saltet för användaren
- $user = Model_User::factory($username);
- if ( ! $user->loaded())
- {
- // Hittade inte användaren
- return FALSE;
- }
- // Hasha lösenordet och jämför
- $password = sha1($user->salt . $password);
- if ($password === $user->password)
- {
- $this->complete_login($user, $remember);
- return TRUE;
- }
- return FALSE;
- }
- /**
- * Returnera användarinfo om inloggad, annars FALSE
- *
- * @return array|bool
- */
- public function get_user()
- {
- if ($this->logged_in())
- {
- return $this->_session->auth;
- }
- return FALSE;
- }
- /**
- * Loggar ut en inloggad användare
- *
- * @return bool lyckat
- */
- public function logout()
- {
- // Radera sessiondatan
- $this->_session->destroy();
- // Radera “kom ihåg”-kakan
- unset($_COOKIE['auth_autologin_token']);
- setcookie('auth_autologin_token', NULL, -86400);
- return empty($this->_session->auth);
- }
- }
- /* End of file auth.php */
- /* Location: ./classes/auth.php */
Add Comment
Please, Sign In to add comment