Я изучаю 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.
Это маршрут на воспитателя: список
Я положил '{!! csrf_field() !!} 'внутри формы, и он отлично работает, а' 'создал другое поле прямо перед моим текстовым полем , Во всяком случае, есть ли способ отключить среднюю программу раз и навсегда?Я имею в виду, я отключил его один раз в проекте, и мне не нужно делать это снова для нового проекта. Потому что я не вижу, чтобы наставник добавлял линию, как ваше предложение, в любой из его проектов. И неудивительно ли получить эту ошибку csrf_token при отправке формы в Laravel? Спасибо, что ответили. –
@TruongVanHoc Вы действительно не хотите отключать промежуточное ПО CSRF, поскольку защита CSRF реальна и по какой-то причине. Вы можете определенно отключить его, но я не думаю, что вам нужно. – Ohgodwhy
Хорошо, спасибо за совет. Поскольку я смотрел дальнейшие обучающие видеоролики, я не знаю, почему, но преподаватель поместил всю форму из представления создания Post в представление обновления Post и добавил '{{csrf_field()}}' внутри формы (в то время как '{{csrf_field()}} 'не существует в форме представления вида). В конце концов он использовал '{!! Форма :: open() !!} 'и' {!! Form :: model() !!} 'для замены тега формы html и' {{csrf_field()}} 'больше не требуется. –