inflearn logo
강의

Course

Instructor

PHP 7+ Programming: Object-Oriented

39 - Post

csrfmiddelware 에러 질문입니다

Resolved

363

akffkqlxmfehfkwl

1 asked

0

Undefined property: stdClass::$csrfToken in /Users/ywkim/StudyPHP/php_blog/app/Middlewares/CsrfTokenMiddleware.php:12
Stack trace:
#0 /Users/ywkim/StudyPHP/php_blog/app/Middlewares/CsrfTokenMiddleware.php(12): App\Providers\ErrorServiceProvider::App\Providers\{closure}(8, 'Undefined prope...', '/Users/ywkim/St...', 12, Array)
#1 /Users/ywkim/StudyPHP/php_blog/vendor/heracles8562/eclair/src/Routing/RequestContext.php(82): App\Middlewares\CsrfTokenMiddleware::process()
#2 /Users/ywkim/StudyPHP/php_blog/vendor/heracles8562/eclair/src/Routing/Route.php(36): Eclair\Routing\RequestContext->runMiddlewares()
#3 /Users/ywkim/StudyPHP/php_blog/app/Providers/RouteServiceProvider.php(17): Eclair\Routing\Route::run()
#4 /Users/ywkim/StudyPHP/php_blog/vendor/heracles8562/eclair/src/Application.php(32): App\Providers\RouteServiceProvider::boot()
#5 [internal function]: Eclair\Application->Eclair\{closure}('App\\Providers\\R...', 4)
#6 /Users/ywkim/StudyPHP/php_blog/vendor/heracles8562/eclair/src/Application.php(32): array_walk(Array, Object(Closure))
#7 /Users/ywkim/StudyPHP/php_blog/public/index.php(7): Eclair\Application->boot()
#8 {main}
<script>
    const $delete = document.getElementById('delete')
    $delete.addEventListener('click', () => {
    alert('/posts/' + '<?=$post->id?>');
        fetch('/posts/' + '<?=$post->id?>', {
            method: 'delete',
            body: JSON.stringify({ _csrfToken: '<?=$_SESSION['CSRF_TOKEN']?>' })
        }).then(() => {
            window.location = '/'
        })
    })
</script>
//delete post
Route::add('delete', '/posts/{id}', '\App\Controllers\PostController::destroy', [
   AuthMiddleware::class,
   RequireMiddleware::class,
   CsrfTokenMiddleware::class
]);

 

script부분도 강사님꺼 복붙해서 똑같은데 라우터에CsrftokenMiddleware::class 만 추가하면 에러가 납니다.

csrf 미들웨어 들어가있는 다른 라우터는 문제가 안되는데 delete할 때만 저렇게 에러가 나고 삭제처리가 안되네요..

왜그런지 알 수 있을까요

oop php

Answer 2

1

pronist

안녕하세요. 정상우입니다 :)

일단, 이 문제에 대한 원인이 그래서 뭐냐? 에 대한 해답을 명쾌하게 드리지 못합니다. 경우의 수가 많기 때문입니다. 따라서 여기서는 가장 가능성이 높을 수 있는 문제에 대해 얘기해드리겠습니다. delete 의 경우에는 json 으로 ajax 요청을 보내고 있는데, body 에 있는 Csrf Token 을 CsrfTokenMiddleware 에서 해석하지 못했다면 $csrfToken 변수를 얻어오지 못합니다.

예제코드: https://github.com/php-courses-inflearn/php7-oop/blob/main/ch6/app/Middlewares/CsrfTokenMiddleware.php#L12

$csrfToken = filter_input(INPUT_POST, '_csrfToken', FILTER_SANITIZE_STRING) ?: json_decode(file_get_contents('php://input'))->_csrfToken;

이 코드에서 ajax 요청에 담긴 body 를 파싱하여 Csrf Token 을 얻어오는 부분은 다음과 같습니다. 이 부분에서 토큰을 얻어오지 못하면 에러가 발생합니다.

json_decode(file_get_contents('php://input'))->_csrfToken;


프론트엔드에서 delete 요청을 보냈을 때 CsrfTokenMiddleware 에서 $csrfToken 에 값이 제대로 할당이 되고, body 를 파싱하는지 검토해보시기 바랍니다. ajax 요청에 담긴 body 값은 php://input 스트림으로 서버에 전달됩니다. :)

0

akffkqlxmfehfkwl

스크린샷 2022-11-18 오전 9.02.58.png해결했습니다 감사합니다..
값 전부 찍어보니 _csrfToken 이 아니라 csrfToken으로 입력했었네요

패케지스트를 하지 않고 섹션7을 수행할수 있나요

0

90

1

나만의 프레임워크 작성 후, 운영환경 배포에 관한 문의 드려요

0

402

1

35강 미들웨어에서 인증 과정을 Auth클래스로 만들면, 어느 디렉토리에 둘까요?

0

335

1

ios환경에서는 어떻게 설치해야 하나요?

0

448

1

라라벨(php) 배포 문의

0

1652

1

왜 http://localhost/ 로 접근하면 public/index.php 가 실행되나요?

0

2102

1

http://localhost:8080/posts/1 접근시 배열 0값 표기 오류

0

397

1

xdebug 설치

0

668

1

localhost 경로

0

441

1

class not found

1

328

1

namespace class not found 질문

0

466

1

url Parttern Parts 가 무슨뜻인가요?

0

349

1

통합 개발환경 (IDE) 관련 문의

0

248

1

Route 클래스 질문이 있습니다!

0

297

1

모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?

0

340

1

안녕하세요 프로젝트를 react와 연동하기에 대해서 여쭈고 싶습니다 :)

1

1377

1

DatabaseSessionHandler.php 에러 해결 부분

0

299

1

안녕하세요. 라우터 서버 연결 질문이 있습니다.

1

281

1

아니 강사님 왜 자꾸 어어 거려요? 진짜 겁나 거슬려 죽겠네 ㅡㅡ 어좀 적당히해요 거슬려 죽겠네 그리고 마이크 좀 좋은거 쓰세요 볼륨이 낮아졌다 커졌ㄷ ㅏ하고 발음도 다뭉개져지고 딕션도 안 좋아서 하나도 안들려요 진짜 개짜증나네

1

574

2

로컬환경에서 개발 후 운영환경으로 배포 시 발생하는 이슈에 대한 문의입니다.

1

575

2

DatabaseSessionHandler 클래스의 gc($maxlifetime) 메소드에 대해 질문드립니다.

2

259

1

Xdebug 설치 후 php index.php 실행하면 오류가 납니다..!

0

1135

1

CentOS 7.* 서버쪽으로 배포를 해보던 중에 질문드립니다.

1

371

1

User 클래스에 대한 질문입니다.

1

187

1