소행성이야기

코드이그나이터에서 JWT 사용하기

소행성왕자 2018. 7. 9. 09:40

코드이그나이터에서 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$keyarray('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 활용하는 부분은 이정도면 활용할수 있으리라 생각됩니다.

궁금하시면 댓글 달아주세요.

아는 한도에서 설명해드릴께요.