csrfmiddelware 에러 질문입니다
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할 때만 저렇게 에러가 나고 삭제처리가 안되네요..
왜그런지 알 수 있을까요
Answer 2
1
안녕하세요. 정상우입니다 :)
일단, 이 문제에 대한 원인이 그래서 뭐냐? 에 대한 해답을 명쾌하게 드리지 못합니다. 경우의 수가 많기 때문입니다. 따라서 여기서는 가장 가능성이 높을 수 있는 문제에 대해 얘기해드리겠습니다. delete 의 경우에는 json 으로 ajax 요청을 보내고 있는데, body 에 있는 Csrf Token 을 CsrfTokenMiddleware 에서 해석하지 못했다면 $csrfToken 변수를 얻어오지 못합니다.
$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 스트림으로 서버에 전달됩니다. :)
패케지스트를 하지 않고 섹션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


해결했습니다 감사합니다..