私はLaravelに不慣れで、奇妙な問題に直面しています。ルートでは、POSTとGETメソッドを介して関数を呼び出しています。
GETはデータを返しますが、POSTは返しません。これが私の単純なコードです:
POSTの場合
Route::post('register', function() {
echo 'we are here';
});
忘れる:
Route::get('register', function() {
echo 'we are here';
});
助けてください。ありがとうございました。
すべてのリクエスト(GETを除く)にCSRFトークンを含める必要があります。
これをフォームに追加します。
<input type="hidden" name="_token" value="{{ csrf_token() }}">
フォームは次のようになります
<form method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
...
</form>
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ミドルウェアは、要求入力のトークンがセッションに格納されているトークンと一致することを自動的に検証します。
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');
},
});
ありがとうございました!