Skip to content

Instantly share code, notes, and snippets.

@fdcore
Created December 13, 2016 00:57
Show Gist options
  • Save fdcore/04e6a8a5fd584f750b62e2eb75be7ec4 to your computer and use it in GitHub Desktop.
Save fdcore/04e6a8a5fd584f750b62e2eb75be7ec4 to your computer and use it in GitHub Desktop.
Класс для работы с временными токенами на CodeIgniter + Sparrow
<?php
/*
Класс работы с токенами подтверждений данных
@author [email protected]
CREATE TABLE `confirm_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`token` varchar(32) NOT NULL,
`expire_time` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
`data` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
class Token extends CI_Model
{
function __construct()
{
parent::__construct();
}
/*
Создание токена с данными
@param array $data массив данных для временного хранения и последующего использования
@param string $confirm_type (default: email_confirm) название/тип токена, для разных типов
@param string $expired дата истечения срока токена, поддерживается относительные даты
*/
function create_token($data, $confirm_type='email_confirm', $expired="+2 hour"){
$this->load->helper('string');
$token = random_string('alnum', 16);
// GC удаляем старые токены
$this->s->from('confirm_data')->where('expire_time <', time())->delete()->execute();
$this->s->from('confirm_data')->insert(array(
'token' => $token,
'expire_time' => strtotime($expired),
'name' => $confirm_type,
'data' => base64_encode(json_encode($data))
))->execute();
return $token;
}
function get_from_token($token, $confirm_type='email_confirm'){
// GC удаляем старые токены
$this->s->from('confirm_data')->where('expire_time <', time())->delete()->execute();
// get data
$data = $this->s->from('confirm_data')
->where('token', $token)
->where('name', $confirm_type)
->one();
if($data){
if(time() < $data['expire_time']){
$name = $data['name'];
$data['data'] = json_decode(base64_decode($data['data']), true);
$this->s->from('confirm_data')->where('token', $token)->delete()->execute();
return $data;
}
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment