2016-07-13 5 views
0

Я изучаю Laravel через видео. Я сделал вид только с текстовым полем и кнопкой отправки. После того, как я нажал кнопку отправки, у меня есть TokenMismatchException в VerifyCsrfToken.php строка 67 ошибка.TokenMismatchException в строке VerifyCsrfToken.php 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:

@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() }}" /> 

но я не видел, чтобы репетитор добавлял эту строку. Я заметил, что в его маршруте: список, значения его MiddleWare столбца пусты, а шахты «паутина»

$ 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

Я положил '{!! csrf_field() !!} 'внутри формы, и он отлично работает, а' 'создал другое поле прямо перед моим текстовым полем , Во всяком случае, есть ли способ отключить среднюю программу раз и навсегда?Я имею в виду, я отключил его один раз в проекте, и мне не нужно делать это снова для нового проекта. Потому что я не вижу, чтобы наставник добавлял линию, как ваше предложение, в любой из его проектов. И неудивительно ли получить эту ошибку csrf_token при отправке формы в Laravel? Спасибо, что ответили. –

+0

@TruongVanHoc Вы действительно не хотите отключать промежуточное ПО CSRF, поскольку защита CSRF реальна и по какой-то причине. Вы можете определенно отключить его, но я не думаю, что вам нужно. – Ohgodwhy

+0

Хорошо, спасибо за совет. Поскольку я смотрел дальнейшие обучающие видеоролики, я не знаю, почему, но преподаватель поместил всю форму из представления создания Post в представление обновления Post и добавил '{{csrf_field()}}' внутри формы (в то время как '{{csrf_field()}} 'не существует в форме представления вида). В конце концов он использовал '{!! Форма :: open() !!} 'и' {!! Form :: model() !!} 'для замены тега формы html и' {{csrf_field()}} 'больше не требуется. –

0

Если вы хотите отключить "веб" промежуточного программного обеспечения для маршрутов от маршрута :: группы ([ 'промежуточного' => [ 'веб']], вы можете сделать это:

файл: приложение/Провайдеры/RouteServiceProvider.php

удалить это: 'промежуточного' => 'паутина',

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^