질문을 삭제하지 말아주세요.!
 
1
0
-1

 

아래 코드에서 form태그의 action 에 url 메소드를 찾아서 넣어봤습니다.

 

그리고 submit 버튼을 누를  경우(소스에서는 편의상 서브밋버튼은 생략시킴)

 

 <!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>DB.Test 화면</title>
 </head>
 <body>
  <form id="study" name="study" method="post" action="{{ url('test/insert')}}">
   <table>
    <colgroup>
     <col style="width: 30%;">
     <col style="width: 70%;">
    </colgroup>
    <thead>
     <tr>
      <th>항목</th>
      <th>값</th>
     </tr>
    </thead>
    <tbody>
     <tr>
      <th>이름</th>
      <td><input type="text" id="name" name="name" value=""></td>
     </tr>
    </tbody>
</html>

 

 

404에러가 납니다. 이런에러가 발생합니다. TokenMismatchException in VerifyCsrfToken.php line 67:

 

근데 직접 수동으로 ip/test/insert를 할 경우

 

페이지는 넘어갑니다.

 

결국에는 폼 전송에서 안된다는건데

 

혹시 따로 설정해주어야 하는게 있나요?

 

db로 간단한 데이터 삽입 작업을 해야되서 암시적 컨트롤러 설정했습니다 라우터도 제대로 되구요

 

Route::controller("test","testdb");
<?php
use App\Study;
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class testdb extends Controller
{
    public function getInsert(){
 }
}

 

 

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      라라벨은 CSRF 공격을 차단하기 위해 데이타를 변경하는 HTTP 요청(POST, PUT, DELETE) 에 대해 csrf 토큰 검증을 하므로 form 에 _token 이라는 히든 필드에 토큰 값을 설정해서 보내야 합니다.

       

      csrf_field() 헬퍼 함수를 쓰면 위 절차를 간단하게 해주니 블레이드 템플릿을 사용한다면 뷰에 다음 코드를 넣으시고요.

      {{ csrf_field() }}

      아니라면 view 에 다음 코드를 넣으세요.

      <?php echo csrf_field(); ?>
      1. 이태희

         

        알려주신것처럼 폼에  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

         

      2. 이태희

         

         

         

         

        hidden필드를 안사용하고 다음과 같이 하면

         

        <form id="study" name="study" method="post" action="{{ url('test/insert')}}">    

        {{ csrf_field() }}

         

        아래와 같이 에러가 발생합니다.

         

        NotFoundHttpException in Controller.php line 93:Controller method not found.

        1. in Controller.php line 93
        2. at Controller->missingMethod(array('insert'))
        3. at call_user_func_array(array(object(testdb), 'missingMethod'), array('_missing' => array('insert'))) in Controller.php line 80
        4. at Controller->callAction('missingMethod', array('_missing' => array('insert'))) in ControllerDispatcher.php line 146
        5. at ControllerDispatcher->call(object(testdb), object(Route), 'missingMethod') in ControllerDispatcher.php line 94
        6. at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
        7. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
        8. at Pipeline->Illuminate\Routing\{closure}(object(Request))
        9. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
        10. at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
      3. 정광섭

        1.직접 hidden 를 만들었고 토큰만 넣을 때는 csrf_token() 를 쓰고
        HTML 필드까지 생성을 원할경우 csrf_field() 를 쓰면 됩니다.


        2.404 나오는건 route 에 제대로 등록되지 않아서 일 듯 하니 routes.php 를 확인해 보세요.

         

      CommentAdd your comment...