개발자의 끄적끄적

[php/codeigniter] 코드이그나이터 ajax csrf 403 error 해결방법 / ajax csrf token 갱신 방법 본문

개발/php

[php/codeigniter] 코드이그나이터 ajax csrf 403 error 해결방법 / ajax csrf token 갱신 방법

효벨 2021. 4. 5. 01:00
728x90
반응형

[php/codeigniter] 코드이그나이터 ajax csrf 403 error 해결방법 / ajax csrf token 갱신 방법

 

 

php codeigniter 에서

 

아래와 같은 ajaxform 을

 

ajax 를 이용해서 컨트롤러로 전달하는 기능을 많이 사용합니다.

<form id="ajaxform" method="post">
    <input type="hidden" id="id_token" name="<?= $this->security->get_csrf_token_name() ?>" value="<?= $this->security->get_csrf_hash() ?>">
</form>

 

그럴때 만약 컨트롤러에서 ok 라고 판단이 되지않고 error 로 페이지에서

 

리턴을 받았을때,

 

다시 시도하려고 하면 403 에러가 발생합니다.

 

csrf token 갱신이 안되서 나는 에러입니다.

 

그럴때는 아래처럼 사용하시면 됩니다.

 

 

전송받고 리턴하는 컨트롤러에서 

 

처리가 끝나고 아래처럼 json_encode 로 리턴할때,

 

새로운 token 을 생성해서 변수에 담아서 같이 전달합니다.

$arr = array();
$arr["data"] = "$this->security->get_csrf_hash()";

echo json_encode($arr);
exit;

 

 

그리고는 아래처럼 r.data 안에 들어있는 토큰값을 form input hidden 에 설정된 아이디의 값에 세팅하면 됩니다!

$.post( "/main/test", $("#ajaxform").serialize(), function(r) {
        ...
        $("#id_token").val(r.data);
        ...
}, "json");

 

 

참고들 하세요!

반응형
Comments