Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Auth
- {
- var $_obj;
- var $_user;
- function Auth()
- {
- $this->_obj =& get_instance();
- $this->_obj->load->library('session');
- $this->_get_session();
- $this->_obj->load->helper('cookie');
- }
- ##############
- ##Шифрование##
- ##############
- function _hash($pass, $email, $salt = NULL) //функция шифрования пароля.
- {
- $string = $pass.$email;
- //'password'
- $encryption_key = $this->_obj->config->item('encryption_key');
- $string = $string.$encryption_key ;
- if ($salt === NULL)
- {
- $salt = sha1(uniqid(rand(), true));
- }
- $string = $string.$salt;
- $hashed = sha1($string);
- return array(
- 'hashed' => $hashed,
- 'salt' => $salt
- );
- }
- #############
- ###SESSION###
- #############
- function _set_session($user)
- {
- $data['id'] = $user['id'];
- $data['email'] = $user['email'];
- $data['first_name'] = $user['first_name'];
- $data['last_name'] = $user['last_name'];
- $data['access'] = $user['access'];
- $data['active'] = $user['active'];
- $data['logged_in'] = 1;
- $this->_obj->session->set_userdata('auth', $data);
- $this->_get_session();
- }
- function set_access()
- {
- return $this->_user['access'];
- }
- function _get_session() // получение сессии
- {
- $user = $this->_obj->session->userdata('auth');
- if ($user === FALSE || (isset($user['logged_in']) && $user['logged_in'] !== '1'))
- {
- $user = array(
- 'id' => 0,
- 'logged_in' => FALSE
- );
- $this->_user = $user;
- return FALSE;
- }
- else
- {
- $this->_user = $user;
- return TRUE;
- }
- }
- function _clear_session()
- {
- $this->_obj->session->unset_userdata('auth');
- $this->_get_session();
- }
- function logged_in()
- {
- return $this->_user['logged_in'];
- }
- function get_user()
- {
- return $this->_user;
- }
- function login($email, $pass) //функция авторизации
- {
- $this->_obj->db->where('email', $email);
- $query = $this->_obj->db->get('log', 1);
- if ($query->num_rows() == 0)
- {
- return FALSE;
- }
- $user = $query->row_array();
- $hashed = $this->_hash($pass, $email, $user['salt']);
- if ($user['pass'] === $hashed['hashed'])
- {
- $this->_set_session($user);
- //set_cookie($cookie);
- return TRUE;
- }
- return FALSE;
- }
- function signup($user = NULL) //регистрация
- {
- if (empty($user)) return false;
- // array(
- // 'email_reg'
- // 'pass_reg'
- // 'first_name'
- // 'last_name'
- // );
- $encrypted = $this->_hash($user['pass'], $user['email']);
- $clean_pass = $user['pass'];
- $user['pass'] = $encrypted['hashed'];
- $user['salt'] = $encrypted['salt'];
- $this->_obj->db->insert('log', $user);
- $this->_obj->db->set('email', $user['email']);
- $this->_obj->db->insert('ocenka');
- $this->login($user['email'], $clean_pass);
- return $user;
- }
- function logout() //разрыв сессии
- {
- $this->_clear_session();
- }
- function reset_password($email) //восстановление пароля, отправка ссылки на почту для восстановление пароля.
- {
- $this->_obj->db->where('email', $email);
- $q = $this->_obj->db->get('log', 1);
- if ($q->num_rows() == 0)
- {
- return FALSE;
- }
- $user = $q->row_array();
- $hash = substr(sha1($email.rand()), 0, 10);
- $data = array(
- 'reset_password_hash' => $hash
- );
- $this->_obj->db->where('id', $user['id']);
- $q = $this->_obj->db->update('log', $data);
- //$config = array(
- // 'protocol' => 'smtp',
- // 'smtp_host' => 'smtp.gmail.com',
- // 'smtp_user' => 'Runisov@gmail.com',
- // 'smtp_pass' => 'lop89Fn2',
- // 'smtp_port' => 576,
- // 'smtp_timeout' => 5
- // );
- //
- //$this->_obj->email->initialize($config);
- $this->_obj->load->library('email');
- $this->_obj->email->to($user['email']);
- $this->_obj->email->from('no-reply@localhost.ru', 'root');
- $this->_obj->email->subject('Восстановление пароля');
- $reset_url = site_url('account/reset/'.$hash);
- $message = "hi {$user['first_name']} {$user['last_name']}, \n\n {$reset_url}";
- $this->_obj->email->message($message);
- $this->_obj->email->send();
- return TRUE;
- }
- function reset_pass($user_id, $pass) // после того когда пользователь перешел по ссылкке для восстановление пароля, и ввел новый, запускается эта функция, для изменения в БД
- {
- $this->_obj->db->where('id', $user_id);
- $q = $this->_obj->db->get('log', 1);
- if ($q->num_rows() == 0)
- {
- return FALSE;
- }
- $user = $q->row_array();
- $new_pass = $this->_hash($pass, $user['email']);
- $data = array(
- 'pass' => $new_pass['hashed'],
- 'salt' => $new_pass['salt']
- );
- $this->_obj->db->where('id', $user['id']);
- $this->_obj->db->update('log', $data);
- return TRUE;
- //die('New password is '.var_dump($new_pass));
- }
- ############
- ####AJAX####
- ############
- function updb($foo) //запись в БД после изменения права доступа пользователя.
- {
- $ac = array(
- 'user' => '0',
- 'admin' => '1',
- 'moder' => '2'
- );
- $data = array('access' => $ac[$foo['access']]);
- $this->_obj->db->where('id', $foo['id']);
- $this->_obj->db->update('log', $data);
- }
- function upstat($st) //запись в БД после изменения статуса пользователя.
- {
- $arstat = array(
- 'block' => '0',
- 'unlock' => '1'
- );
- $data = array('active' => $arstat[$st['status']]);
- $this->_obj->db->where('id', $st['id']);
- $this->_obj->db->update('log', $data);
- }
- }
Add Comment
Please, Sign In to add comment