코드이그나이터에서 JWT 사용하기
php 의 firebase/php-jwt 사용하여 JWT 를 사용해봅시다.
루트 경로에 third_part 를 만들고
third_part 에서 아래 명령어를 입력합니다.
1 2 3 | composer require firebase/php-jwt | cs |
그러면 아래와 같이 설치됩니다.
이제 로그인 시스템에 붙여야겠죠?
해당 controllers 의 상단에 아래와 같이 추가해주시구요.
1 2 3 4 5 | require_once APPPATH."third_party/vendor/autoload.php"; use Firebase\JWT\JWT; define('JWT_SECRET', 'this-is-the-secret'); | cs |
아이디와 패스워드를 검증확인이 되었으면
토큰을 발급해줍니다.
1 2 3 4 | $jwtResult = $this->makeJWTEncode($GetSelect); redirect("../Main?jwt=".$jwtResult['jwt'],'refresh'); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | private function makeJWTEncode($GetSelect) { $result = array( 'code' => 200, 'status' => 'success', 'message' => 'Valid login credentials.', 'userid' => $GetSelect["login_id"] ); $userid = $GetSelect["login_id"]; $issuedAt = time(); $expirationTime = $issuedAt + 60; // jwt valid for 60 seconds from the issued time $payload = array( 'userid' => $userid, 'iat' => $issuedAt, 'exp' => $expirationTime ); $key = JWT_SECRET; $alg = 'HS256'; $jwt = JWT::encode($payload, $key, $alg); $result['jwt'] = $jwt; return $result; } | cs |
앞서 말씀드린 첫번째 머신에서의 할일은 끝났습니다.
두번째 머신에서 해야할일을 소스코드로 볼께요.
두번째 머신에서도 당연히 아래 명령어를 실해해야겠죠?
1 2 3 | composer require firebase/php-jwt | cs |
그리고 인증을 해야 하는 파일에 아래 코드를 삽입합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?php require_once './vendor/autoload.php'; use Firebase\JWT\JWT; define('JWT_SECRET', 'this-is-the-secret'); // get the jwt from url $jwt = isset($_GET['jwt']) ? $_GET['jwt'] : null; if (isset($jwt)) { // validate jwt 로그인된 상태 $key = JWT_SECRET; try { $decoded = JWT::decode($jwt, $key, array('HS256')); $decoded_array = (array)$decoded; $result = array( 'code' => 200, 'status' => 'success', 'data' => getUserAccountData($decoded_array['userid']), 'jwt_payload' => $decoded_array ); } catch (\Exception $e) { $result = array( 'code' => 0, 'status' => 'error', 'message' => $e->getMessage().' Invalid JWT - Authentication failed!' ); } } else { $result = array( 'code' => 0, 'status' => 'error', 'message' => 'JWT parameter missing!' ); } echo json_encode($result); function getUserAccountData() { // 실제 데이터 가져오는 부분 $res = []; $res['id'] = 'keri'; $res['email'] = 'aa@aa.aa'; $res['addr'] = 'seoul'; $res['hp'] = '010-1111-2222'; return $res; } | cs |
php 에서 JWT 활용하는 부분은 이정도면 활용할수 있으리라 생각됩니다.
궁금하시면 댓글 달아주세요.
아는 한도에서 설명해드릴께요.
'소행성이야기' 카테고리의 다른 글
[part 4] PHP로 좋은 객체 지향(OOP) 습관을 가집시다. 부제: 가장 약한 링크를 받아 들이자(느슨한 결합) (0) | 2018.07.09 |
---|---|
엘라스틱 서치 + 키바나 설치 및 설정 (0) | 2018.07.09 |
JWT의 구조는 어떻게 생겼을까? (1) | 2018.07.09 |
JWT 왜 사용할까요 ? (0) | 2018.07.09 |
[part 3] PHP로 좋은 객체 지향(OOP) 습관을 가집시다. 부제: 메두사를 바라 보지 마라 (0) | 2018.07.09 |