diff --git a/app/Controllers/LoginController.php b/app/Controllers/LoginController.php index 830fb02..eb3d98e 100755 --- a/app/Controllers/LoginController.php +++ b/app/Controllers/LoginController.php @@ -9,6 +9,7 @@ use Psr\Log\LoggerInterface; use App\Models\UserModel; use App\Models\AuthHistoryModel; +use App\Libraries\AuthLogout; class LoginController extends BaseController { @@ -54,25 +55,29 @@ class LoginController extends BaseController $path = getenv('cookie.Path'); $domain = getenv('cookie.Domain'); $https = getenv('ccokie.secure'); - setcookie('session_data', json_encode($session_data), time() + 12 * 60 * 60, $path, $domain, $https, true); + // setcookie('session_data', json_encode($session_data), time() + 12 * 60 * 60, $path, $domain, $https, true); set_session_data($session_data); + // Bind session to device + set_session_data(['fingerprint' => hash('sha256', + ($this->request->getUserAgent()->getAgentString() . '|' . ($this->request->getIPAddress() + )))]); log_message('error', 'Set The UserId : `'. $user->id .'` in Session'); log_message('error', 'User Login Sucessfully'); $this->getUserDeviceInfo($user->id, 'NhanceUser'); - return redirect()->to(base_url('/dashboard/view')); + return AuthLogout::logout(); }else{ log_message('error', 'User Not Active'); session()->setFlashdata('error', 'User Not Active'); - return redirect()->to(base_url('login')); + return AuthLogout::logout(); } }else{ log_message('error', 'User Not Registered'); session()->setFlashdata('error', 'User Not Registered'); - return redirect()->to(base_url('login')); + return AuthLogout::logout(); } } @@ -94,14 +99,16 @@ class LoginController extends BaseController // setcookie('session_data', '', time() - 3600, $path); // return redirect()->to(base_url('login')); - $path = getenv('cookie.Path'); - session()->destroy(); - // setcookie('session_data', '', time() - 3600, $path); - $path = getenv('cookie.Path'); - $domain = getenv('cookie.Domain'); - $https = getenv('cookie.secure'); - setcookie('session_data',null, time() -3600, $path, $domain, $https, true); - return redirect()->to(base_url('login')); + // $path = getenv('cookie.Path'); + // session()->destroy(); + // // setcookie('session_data', '', time() - 3600, $path); + // $path = getenv('cookie.Path'); + // $domain = getenv('cookie.Domain'); + // $https = getenv('cookie.secure'); + // setcookie('session_data',null, time() -3600, $path, $domain, $https, true); + // return redirect()->to(base_url('login')); + + return AuthLogout::logout(); } diff --git a/app/Filters/AuthMVC.php b/app/Filters/AuthMVC.php index 0a9f7a6..e6c6948 100755 --- a/app/Filters/AuthMVC.php +++ b/app/Filters/AuthMVC.php @@ -5,12 +5,29 @@ use CodeIgniter\Filters\FilterInterface; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; +use App\Libraries\AuthLogout; + class AuthMVC implements FilterInterface { public function before(RequestInterface $request, $arguments = null) { - if (!check_session() && !check_cookie()) { - return redirect()->to(base_url('/login')); + if (!check_session()) + { + return AuthLogout::logout(); + } + + // if (!check_cookie()) + // { + // return AuthLogout::logout(); + // } + + // Fingerprint validation + $fp = hash('sha256', + $request->getUserAgent()->getAgentString() . '|' . $request->getIPAddress() + ); + + if (session()->get('fingerprint') !== $fp) { + return AuthLogout::logout(); } } diff --git a/app/Helpers/session_helper.php b/app/Helpers/session_helper.php index 3d312d6..eb9eb9a 100755 --- a/app/Helpers/session_helper.php +++ b/app/Helpers/session_helper.php @@ -21,7 +21,7 @@ if(!function_exists('check_cookie')){ 'userProfile' => $value['userProfile'], 'user_team' => $user_team, ]; - set_session_data($session_data); + // set_session_data($session_data); // $this->getUserDeviceInfo($user->id, 'NhanceUser'); // return redirect()->to(base_url('/dashboard/view')); return true; diff --git a/app/Libraries/AuthLogout.php b/app/Libraries/AuthLogout.php new file mode 100644 index 0000000..cfb1005 --- /dev/null +++ b/app/Libraries/AuthLogout.php @@ -0,0 +1,42 @@ +regenerate(true); + + // Destroy CI session + $session->destroy(); + + // Kill PHP session cookie safely + if (ini_get('session.use_cookies')) { + $params = session_get_cookie_params(); + + setcookie( + session_name(), // DO NOT hardcode cookie name + '', + time() - 42000, + $params['path'], + $params['domain'], + $params['secure'], + $params['httponly'] + ); + } + + session_write_close(); + + // Redirect with anti-cache headers + return redirect()->to(base_url('login')) + ->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->setHeader('Pragma', 'no-cache') + ->setHeader('Expires', 'Sat, 26 Jul 1997 05:00:00 GMT'); + } +}