codeigniter에서 PHP 앱용 로그인 시스템을 설정하는 방법에 대한 자습서를 따랐습니다. 사용자가 세션 데이터를 가지고있을 때의 논리는 훌륭하게 작동하지만 사용자가 로그인하지 않은 경우 문제가 있습니다 (예 : 잠시 후 페이지를 새로 고칩니다). 생성자에서 functin을 호출 할 때 "not_logged_in"뷰가 두 번 실행됩니다. 다음 코드는 작동하지만 나중에 추가하는 모든 함수에 대해 코드를 추가해야 함을 의미합니다.
class App extends CI_Controller {
function __construct()
{
parent::__construct();
}
private function logged_in()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if (isset($is_logged_in) OR $is_logged_in)
{
return TRUE;
}
else
{
$data['title'] = 'Chyba přihlášení';
$data['main_content'] = 'not_logged_in';
$this->load->view('includes/template', $data);
return FALSE;
}
}
function index()
{
if($this->logged_in())
{
$data['title'] = 'APLIKACE';
$data['main_content'] = 'app_view';
$data['userid'] = $this->session->userdata('userid'); //get userid from session
$this->session->unset_userdata('userid'); //destroy the data
$this->load->view('includes/template' , $data);
}
}
function logout()
{
$this->session->sess_destroy();
redirect('login');
}
}
이제 실제 질문은 모든 함수에서 확인하지 않고도 전체 논리를 생성자에 넣는 방법입니다.
APPPATH.'core/MY_Controller.php'
파일을 만들고 생성자에 인증 로직을 넣으 십시오 . 모든 컨트롤러에서 해당 클래스를 확장하는 것보다 (인증 로직이 필요합니다).
class MY_Controller extends CI_Controller
{
public function __construct();
{
parent::__construct();
$this->check_login();
}
protected function check_login()
{
$is_logged_in = $this->session->userdata('is_logged_in');
//here should be *AND* instead *OR* logic
if (isset($is_logged_in) && !empty($is_logged_in))
{
return TRUE;
}
else
{
redirect('login/index');
exit();
}
}
}
Login.php 컨트롤러 :
class Login extends CI_Controller//NOT extending MY_Controller to avoid infinite loop
{
public function __construct();
{
parent::__construct();
}
public function index()
{
//here is login view
//and logic of preserving session
//with redirect to 'app/index' after successful login
}
public function logout()
{
$this->session->sess_destroy();
redirect('login');
}
}
App.php 컨트롤러 :
class App extends MY_Controller//extending MY_Controller to check login status
{
public function __construct();
{
parent::__construct();
}
public function index()
{
//here is app dashboard view
}
public function statistics()
{
//here is some other method that requires logged in user
}
}
또한 Ion_auth 인증 시스템을 확인하여 적합한 지 확인하는 것이 좋습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다