라라벨은 CSRF 공격을 차단하기 위해 데이타를 변경하는 HTTP 요청(POST, PUT, DELETE) 에 대해 csrf 토큰 검증을 하므로 form 에 _token 이라는 히든 필드에 토큰 값을 설정해서 보내야 합니다.
csrf_field() 헬퍼 함수를 쓰면 위 절차를 간단하게 해주니 블레이드 템플릿을 사용한다면 뷰에 다음 코드를 넣으시고요.
{{ csrf_field() }}
아니라면 view 에 다음 코드를 넣으세요.
<?php echo csrf_field(); ?>
알려주신것처럼 폼에 hidden 타입으로 넣었습니다.
<form id="study" name="study" method="post" action="{{ url('test/insert')}}">
<input type="hidden" name="_token" value="{{ csrf_field() }}">
그리고 서브밋 했더니 에러가 발생합니다. 마찬가지로 엔터를 누르면 잘넘어갑니다.
1.TokenMismatchException in VerifyCsrfToken.php line 67:
a.in VerifyCsrfToken.php line 67
b.at VerifyCsrfToken->handle(object(Request), object(Closure))
c.at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
d.at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
e.at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
hidden필드를 안사용하고 다음과 같이 하면
<form id="study" name="study" method="post" action="{{ url('test/insert')}}">
{{ csrf_field() }}
아래와 같이 에러가 발생합니다.
NotFoundHttpException in Controller.php line 93:
1.직접 hidden 를 만들었고 토큰만 넣을 때는 csrf_token() 를 쓰고
HTML 필드까지 생성을 원할경우 csrf_field() 를 쓰면 됩니다.
2.404 나오는건 route 에 제대로 등록되지 않아서 일 듯 하니 routes.php 를 확인해 보세요.
아래 코드에서 form태그의 action 에 url 메소드를 찾아서 넣어봤습니다.
그리고 submit 버튼을 누를 경우(소스에서는 편의상 서브밋버튼은 생략시킴)
404에러가 납니다. 이런에러가 발생합니다. TokenMismatchException in VerifyCsrfToken.php line 67:
근데 직접 수동으로 ip/test/insert를 할 경우
페이지는 넘어갑니다.
결국에는 폼 전송에서 안된다는건데
혹시 따로 설정해주어야 하는게 있나요?
db로 간단한 데이터 삽입 작업을 해야되서 암시적 컨트롤러 설정했습니다 라우터도 제대로 되구요