2016-07-13 15 views
0

私はLaravelを動画で勉強しています。私は、テキストボックスと送信ボタンだけでビューを作った。 Submitボタンをクリックすると、VerifyCsrfToken.php行67のTokenMismatchExceptionエラーが発生します。VerifyCsrfToken.php行のTokenMismatchException 67 - ミドルウェアを無効にしてデフォルトに設定する方法

TokenMismatchException in VerifyCsrfToken.php line 67: 

C:\xampp\htdocs\laravel_tut\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php line 67: 
in VerifyCsrfToken.php line 67 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 726 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699 
at Router->dispatchToRoute(object(Request)) in Router.php line 675 
at Router->dispatch(object(Request)) in Kernel.php line 246 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 132 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 
at Kernel->handle(object(Request)) in index.php line 54 

私はPostsControllerの持っている:

//PostsController 
<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 

class PostsController extends Controller 
{ 
    ... 

    public function create() 
    { 
     // 
     return view('posts.create'); 
    } 

    public function store(Request $request) 
    { 
     // 
     return $request->all(); 
    } 
    ... 
} 

のroutes.php:

Route::resource('/posts', 'PostsController'); 
Route::group(['middleware'=>['web']],function(){ 

}); 

create.blade.php:私はGoogleで検索して

@extends('layouts.app') 

@section('content') 

<form method="post" action="/posts"> 
    <input type="text" name="title" placeholder="Enter title"> 
    <input type="submit" name="submit"> 
</form> 

最もソリューションの追加をお勧め:

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

私はこの行を追加するチューターは見ませんでした。鉱山は、「ウェブ」

$ php artisan route:list 
+--------+-----------+--------------------+---------------+----------------------------------------------+------------+ 
| Domain | Method | URI    | Name   | Action          | Middleware | 
+--------+-----------+--------------------+---------------+----------------------------------------------+------------+ 
|  | GET|HEAD | insert    |    | Closure          | web  | 
|  | POST  | posts    | posts.store | App\Http\Controllers\[email protected] | web  | 
|  | GET|HEAD | posts    | posts.index | App\Http\Controllers\[email protected] | web  | 
|  | GET|HEAD | posts/create  | posts.create | App\Http\Controllers\[email protected] | web  | 
|  | DELETE | posts/{posts}  | posts.destroy | App\Http\Controllers\[email protected] | web  | 
|  | PUT|PATCH | posts/{posts}  | posts.update | App\Http\Controllers\[email protected] | web  | 
|  | GET|HEAD | posts/{posts}  | posts.show | App\Http\Controllers\[email protected] | web  | 
|  | GET|HEAD | posts/{posts}/edit | posts.edit | App\Http\Controllers\[email protected] | web  | 
+--------+-----------+--------------------+---------------+----------------------------------------------+------------+ 

私は、このミドルウェアを無効にすることができれば、問題が解決されることを想定している間、リスト、彼のミドルウェアの列の値が空である:私は彼のルートであることに気づきました。しかし、彼のプロジェクトでは、教師がディセーブル・ステップを実行するのを見ていないので、彼はデフォルトでそれを設定していると思うので、ミドルウェアはどのプロジェクトでも常に無効になっています。このVerifyCsrfTokenエラーを修正する正しい方法を考えていますか?もしそうなら、どのようにミドルウェアを無効にして他のプロジェクトのデフォルトにすることができますか?私はLaravel 5.2.39とNetBeans IDEを使用しています。

これは、家庭教師のルートです:リスト

tutor's route:list

答えて

1

はありがたいことに、これはかなり単純です。 jQueryとメタタグ付き

、あなたのすべてのフォームは、常に適切なトークン得ることを確認できます。

$('form').each(function(i, form){ 
    var $form = $(form); 

    if (! $form.find('input[name="_token"]').length) { 
     $('form').prepend('<input type="hidden" name="_token" value="'+ $('meta[name="csrf-token"]').prop('content') +'"/>'); 
    } 
}); 

をそれとも、それを手動で1〜2の方法を行うことができ、両方のあなたは以下を参照することができます:

+0

私は '{!! 'は、テキストボックスの直前に別のボックスを作成しました。 。とにかく、ミドルウェアを一度無効にする方法はありますか?つまり、プロジェクトでは一度無効にしています。新しいプロジェクトではこれをやり直す必要はありません。私は家庭教師が彼のプロジェクトのいずれかであなたの提案のような行を追加することを見ていないので。 Laravelでフォームを送信するときにこのcsrf_tokenエラーが発生するのは自然ですか?返信いただきありがとうございます。 –

+0

@TruongVanHoc CSRFの保護は現実的な理由から、本当にCSRFミドルウェアを無効にしたくないのです。あなたは間違いなくそれを無効にすることができますが、私はあなたがすべきではないと思います。 – Ohgodwhy

+0

さて、アドバイスをいただきありがとうございます。私はチュートリアルのビデオを見ていたので、チュートリアルの理由は分かりませんでしたが、チュートリアル全体のフォームをポストの作成ビューからポストの更新ビューに置き、 '{{csrf_field()}}'をフォームの中に追加しました( '{{csrf_field ()}} 'は作成ビューのフォームには存在しません)。最終的に彼は '{!! Form :: open()!!} 'と' {!! htmlのformタグと '{{csrf_field()}} 'を置き換えるためのForm :: model()!!}'はもう必要ありません。 –

0

あなたが "ウェブ" ルートオフルートのためのミドルウェア::グループ(無効にしたい場合は[ 'ミドルウェアを' => [ 'ウェブ']]、あなたがこれを行うことができます:

ファイル:アプリ/ Providers/RouteServiceProvider.php

削除この 'ミドルウェア' => 'ウェブ'、

enter image description here

関連する問題