web-dev-qa-db-ja.com

Laravel 5 GETは機能していますが、POSTメソッドは機能していません

私はLaravelに不慣れで、奇妙な問題に直面しています。ルートでは、POSTとGETメソッドを介して関数を呼び出しています。

GETはデータを返しますが、POSTは返しません。これが私の単純なコードです:

POSTの場合

Route::post('register', function() {
    echo 'we are here';
});

忘れる:

Route::get('register', function() {
    echo 'we are here';
});

助けてください。ありがとうございました。

5
Zain SMJ

すべてのリクエスト(GETを除く)にCSRFトークンを含める必要があります。

https://laravel.com/docs/5.2/routing#csrf-protection

13
Chris

これをフォームに追加します。

<input type="hidden" name="_token" value="{{ csrf_token() }}">

フォームは次のようになります

<form method="POST">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">

   ...
</form>
2
Dan Both

Laravelは、アプリケーションによって管理されるアクティブなユーザーセッションごとにCSRF「トークン」を自動的に生成します。このトークンは、認証されたユーザーが実際にアプリケーションに要求を行っているユーザーであることを確認するために使用されます。

アプリケーションでHTMLフォームを定義するときはいつでも、CSRF保護ミドルウェアが要求を検証できるように、フォームに非表示のCSRFトークンフィールドを含める必要があります。非表示のCSRFトークンフィールドを生成するには、csrf_fieldヘルパー関数を使用できます。

//バニラPHP:

<?php echo csrf_field(); ?>

//ブレードテンプレートの構文:

{{ csrf_field() }}

Csrf_fieldヘルパー関数は次のHTMLを生成します。

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

POST、PUT、またはDELETEリクエストでCSRFトークンを手動で確認する必要はありません。 Webミドルウェアグループに含まれるVerifyCsrfTokenミドルウェアは、要求入力のトークンがセッションに格納されているトークンと一致することを自動的に検証します。

0
Vikash Kumar

Ajaxを使用せずにWebで作業している場合は、上記の回答を確認して使用するか、

<form action="">
   @csrf
   ...
</form>

Ajaxリクエストを介してこのURLを呼び出す必要がある場合ステップ1:メタタグ内にCSRFトークンを追加します()、main.blade.phpファイル内で指定できます(レイアウト)

<meta name="csrf-token" content="{{ csrf_token() }}">

ステップ2:ajaxリクエスト内にX-CSRF-TOKENヘッダーを追加します

    var APP_URL = {!! json_encode(url('/')) !!}
    $.ajax({
            type:'post',
            data:({search:input}),
            headers: {
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: ''+APP_URL+'/register',
            success:function(data)
            {
                alert("success");
            },
            error:function(data)
            {
               alert('error');
            },
        });

ありがとうございました!

0
Manu Joseph