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
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;
|
|
}
|
|
}
|