【问题标题】:TokenMismatchException in VerifyCsrfToken.php line 67 - Laravel 5.2VerifyCsrfToken.php 第 67 行中的 TokenMismatchException - Laravel 5.2
【发布时间】:2016-06-28 15:13:28
【问题描述】:

我正在通过教程处理这个项目,但是当我尝试将新类别添加到视图中时,我在 VerifyCsrfToken.php 第 67 行中得到了这个 TokenMismatchException 错误,我尝试了互联网上的所有内容:- 添加

<input type="hidden" name="_token" value="{{ Session::token() }}"> 

或添加

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

我的代码也删除了 CSRF middileware 没有任何效果

这里是原代码

观点

    @extends('layouts.admin-master')

@section('styles')
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="{{ URL::secure('src/css/categories.css') }}" type="text/css" />
@endsection

@section('content')
    <div class="container">
        <section id="category-admin">
            <form action="" method="post">
                <div class="category-input">
                    <label for="name">Category Name</label>
                    <input type="text" name="name" id="name">
                    <button type="submit" class="btn">Create Category</button>

                </div>


            </form>
        </section>
        <section class="list">
            @foreach($categories as $category)
                <article>
                    <div class="category-info" data-id="{{ $category->id }}">
                        <h3>{{ $category->name }}</h3>
                    </div>
                    <div class="edit">
                        <nav>
                            <ul>
                                <li class="category-edit"><input type="text"></li>
                                <li><a href="">Edit</a></li>
                                <li><a href="" class="danger">Delete</a></li>
                            </ul>
                        </nav>
                    </div>
                </article>
            @endforeach
        </section>
        @if($categories->lastPage() > 1)
            <section class="pagination">
                @if($categories->currentPage() !== 1)
                    <a href="{{ $categories->previousPageUrl() }}"><i class="fa fa-caret-left"></i> </a>
                @endif
                @if($categories->currentPage() !== $categories->lastPage())
                    <a href="{{ $categories->nextPageUrl() }}"><i class="fa fa-caret-right"></i> </a>
                @endif
            </section>
        @endif
    </div>

@endsection

@section('scripts')
    <script type="text/javascript">
        var token = "{{ Session::token() }}";
    </script>
    <script type="text/javascript" src="{{ URL::secure('src/js/categories.js') }}"></script>
@endsection

这里是控制器

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Category;
use Illuminate\Support\Facades\Response;


class CategoryController extends Controller{

    public function getCategoryIndex()
    {
        $categories = Category::orderBy('created_at', 'desc')->paginate(5);
        return view('admin.blog.categories',['categories' => $categories]);
    }

    public function postCreateCategory(Request $request)
    {
        $this->validate($request, [
           'name' => 'required|unique:categories'
        ]);

        $category = new Category();
        $category->name = $request['name'];
        if($category->save()){
            return Response::json(['message' => 'Category Created Successfully!'], 200);
        }
        return Response::json(['message' => 'Error During Creation'], 404);
    }
}

这就是Js文件

var docReady = setInterval(function(){
    if (document.readyState !== "complete"){
        return;
    }
    clearInterval(docReady);

    document.getElementsByClassName('btn')[0].addEventListener('click',createNewCategory);
    var _token = document.getElementsByName('_token')[0].value;
//and append the value to form data
    formdata.append("_token", _token);
},100);



function createNewCategory(event) {
    event.preventDefault();
    var name = event.target.previousElementSibling.value;
    if(name.length === 0) {
        alert("Please A Valid Category Name!");
        return;
    }
    ajax("POST","/admin/blog/category/create", "name=" + name, newCategoryCreated, [name]);
}

function newCategoryCreated(params, success, responseObj){
    location.reload();
}

function ajax(method, url, params, callback, callbackParams){
    var http;

    if (window.XMLHttpRequest){
        http = new XMLHttpRequest();
    }else {
        http = new ActiveXObject("Microsoft.XMLHTTP");
    }

    http.onreadystatechange = function(){
        if (http.readyState == XMLHttpRequest.DONE){
            if (http.status == 200){
                var obj = JSON.parse(http.responseText);
                callback(callbackParams, true, obj);
            }else if(http.status ==400){
                alert("Category Could Not Be Saved. Please Try Again");
                callback(callbackParams, false);
            }else {
                var obj = JSON.parse(http.responseText);
                if (obj.message){
                    alert(obj.message);
                }else {
                    alert("Please Check The Name");
                }

            }
        }


    }

    http.open(method, baseUrl + url, true);
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    http.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    http.send(params + "&_token=" + token);
}

这就是路线

Route::post('/blog/category/create',[
            'uses' => 'CategoryController@postCreateCategory',
            'as' => 'admin.blog.category.create'
        ]);

Route::get('/blog/categories',[
            'uses' => 'CategoryController@getCategoryIndex',
            'as' => 'admin.blog.categories'
        ]);

请帮我解决这个错误我已经坚持了三天了

【问题讨论】:

  • 你最好像这样设置一个 X-CSRF-TOKEN: http.setRequestHeader('X-CSRF-TOKEN', token);因为 Laravel 在标头中接受令牌。如果我没记错的话,你想要发送它的方式是 GET 请求而不是 POST。
  • 能否请您详细说明一下,我还是 laravel 的初学者,谢谢您的帮助
  • 在表单中使用 {{ csrf_field() }} 或者你也可以禁用令牌验证
  • 这样做了,我得到了这个错误:RouteCollection.php 第 218 行中的 MethodNotAllowedHttpException
  • 你看到 http.setRequestHeader('X-Requested-With', 'XMLHttpRequest');只需在它下面添加我给你的行。这会将令牌作为标头传递。

标签: laravel laravel-5.2


【解决方案1】:

设置您的 post_max_size = 100 mb 或您需要的大小。

【讨论】:

  • 请检查您的文件上传大小然后
【解决方案2】:

在每个输入字段之前添加&lt;input type="hidden" name="_token" value="{{ csrf_token() }}"&gt;

 <input type="hidden" name="_token" value="{{ csrf_token() }}">  
<input type="text" name="last_name" id="last_name" placeholder="Last Name" class="form-control">

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2017-09-24
    • 1970-01-01
    • 2016-07-27
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多