You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
2.5 KiB

<?php
namespace app\core\traits;
use app\core\utils\Cookie;
trait Rememberme {
/**
* Cookie definitions
*
* u - USERID
* r - ROLEID
* t - REMEMBERME TOKEN
* ut- isBOUser (1 = BO, 0 = FO)
*/
public static function get(int $isBOUser = 0) {
// Get CodeIgniter instance
$CI =& get_instance();
if (!self::isRemembered($isBOUser)) return false;
$CI->load->model('user_model');
$rem = json_decode(get_cookie($CI->config->item('sess_cookie_name').'_rm'));
return $CI->user_model->verify_remember_me(
$rem->u,
$rem->r,
$rem->t,
$rem->ut
);
}
public static function create(int $user_id, int $role_id, int $isBOUser = 1) {
// Get CodeIgniter instance
$CI =& get_instance();
$CI->load->model('user_model');
// Generate RemToken
$remToken = generateRandomString(20);
// Create Rememberme cookie
Cookie::create([
'name' => 'rm',
'value' => json_encode([
"u" => $user_id,
"r" => $role_id,
"t" => $remToken,
"ut" => $isBOUser
]),
'expire' => '172800', //2days
'prefix' => $CI->config->item('sess_cookie_name').'_',
// 'domain' => 'localhost'
]);
// Save remToken in user account
$CI->user_model->update_remember_me(
$user_id,
$role_id,
$remToken
);
}
public static function forget() {
// Get CodeIgniter instance
$CI =& get_instance();
$rem = self::get(1);
$rem = $rem ?? self::get(0);
if ($rem) {
// Remove remToken in user account
$CI->user_model->update_remember_me(
$rem->user_id,
$rem->role_id,
null
);
// Remove cookie
Cookie::delete($CI->config->item('sess_cookie_name').'_rm');
}
}
public static function isRemembered(int $isBOUser = 0): bool {
// Get CodeIgniter instance
$CI =& get_instance();
if( (is_null(get_cookie($CI->config->item('sess_cookie_name').'_rm')) || empty(get_cookie($CI->config->item('sess_cookie_name').'_rm'))) )
return false;
$rem = json_decode(get_cookie($CI->config->item('sess_cookie_name').'_rm'));
if ((int) $rem->ut !== $isBOUser)
return false;
return true;
}
}