코드이그나이터3 세션 설정

php

 

메인 페이지가 있다는 가정하에

www.example.com/admin으로 접속했을 때 아이디가 admin인 관리자만 접속이 가능하도록 해보았다

application/config/routes.php에서

$route['admin'] = 'AdminController/view_users';

추가해준다 view_users.php 뷰 파일 이름이다

 

 

 

모델에 application/models/UserModel.php를 만들고 UserModel 클래스에서 사용자정보를 조회하는 함수를 만든다

class UserModel extends CI_Model {
    public function fetchAllUsers() {
          $query = $this->db->get('userTable');
          return $query->result();
    }
}

CI_Model은 코드이그나이터에서 제공하는 기본 모델 클래스로, 데이터베이스 작업과 관련된 도구 제공

public function으로 컨트롤러에서 활용할 수 있도록 해줌

코드이그나이터의 라이브러리 사용해서 userTable에서 모든 사용자 정보 검색

결과는 $query 배열에 저장되고 result();를 사용하여 결과를 배열로 반환

 

 

 

application/controllers/ApiController.php에는 Api컨트롤러에서 사용자 정보를 확인하고 세션에 저장

if ($userInfo) {
    $sessionData = array(
          'email' => $userInfo->email,
          'userId' => $userInfo->userId,
          'userName' => $userInfo->userName, 
          'userRole' => ($userInfo->is_admin == 1) ? 'admin' : 'user'
    );
    $this->session->set_userdata($sessionData);
    $data['response'] = $sessionData;
} else {
    $data['response'] = null;
}
echo json_encode($data);

$userInfo 변수는 데이터베이스에서 조회한 사용자의 정보가 있는 변수이다 이변 수가 존재하면 사용자 인증이 성공적으로 이루어졌다고 가정했다

인증에 성공하면 이메일, 유저 아이디, 유저 이름, 유저 롤을 $sessionData 배열에 저장한 후

사용자 역할은 $userInfo->is_admin 값에 따라 결정되고 값이 1이면 admin 1이 아니면 user로 설정

그다음 코드이그나이터의 세션 라이브러리를 사용해 세션 데이터 저장

세션 데이터를 $data[‘response’]에 할당하고 클라이언트에 전송할 응답 데이터이다

클라이언트는 사용자의 세션 정보를 확인할 수 있게 됨

$userInfo가 null이거나 존재하지 않으면 $data[‘respone’]는 null로 설정

최종적으로 echo json_encode($data);를 통해 $data 배열을 JSON 형식의 문자열로 인코딩 후 사용자에게 출력

 

 

 

application/controllers/AdminController에는

private function redirectNonAdmins() {
    if (!$this->session->userdata('userRole') || $this->session->userdata('userRole') !== 'admin') {
       redirect('mainPage');
    }
}

세션을 확인하여 사용자가 관리자 권한이 없을 경우 메인 페이지로 리다이렉션함

 

 

 

 

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다