【问题标题】:Issue with Laravel5 csrf and ajax requestLaravel5 csrf 和 ajax 请求的问题
【发布时间】:2015-03-17 00:03:18
【问题描述】:

我试图在 laravel5 中执行 ajax 请求,但它总是响应错误 500。 这是我的代码

路由.php

Route::post('manager/category/new', ['as' => 'category.store', 'uses' => 'CategoryController@store']);

html:

{!! Form::open(['id' => 'new-category-form']) !!} <div class="modal fade" id="new-category" tabindex="-1" role="dialog" aria-labelledby="new-category-label" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="new-category-label">New category</h4>
            </div>
            <div class="modal-body">
                <form>
                    <div class="form-group">
                        <label for="parent-category-id" id="parent-category-name" class="control-label">Parent category: &xxx</label>
                        <input type="hidden" class="form-control" id="parent-category-id" name="parent_category_id">
                    </div>
                    <div class="form-group">
                        <label for="category-name" class="control-label">Category name:</label>
                        <input type="text" class="form-control" id="category-name" name="category_name" />
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                <button type="button" class="btn btn-primary">Add</button>
            </div>
        </div>
    </div> </div> {!! Form::close() !!}

js:

$(document).ready(function(){
        $('#new-category').on('show.bs.modal', function (event) {
            var button = $(event.relatedTarget); // Button that triggered the modal
            var recipient = button.data('whatever');
            var modal = $(this);
            modal.find('#parent-category-name').html('Parent category: ' + recipient.name);
            modal.find('#parent-category-id').val(recipient.value);
            modal.find('.btn-primary').click(function(){
                console.log($('#new-category-form').serialize());
                console.log('{!!Session::token()!!}');
                $.ajax({
                    url: "{!!route('category.store')!!}",
                    context: $('#new-category-form').serialize(),
                    type: 'post'
                })
            });
        })
    });

我记录了“_token”及其匹配项,但请求仍然失败

_token=Nt9S0uED4JZ7toALLlGP6VY16w2aj4KCCENn0tapL&parent_category_id=0&category_name=345345

session_token=Nt9S0uED4JZ7toALlGP6VY16w2aj4KCCENn0tapL

POST http://localhost:8000/manager/category/new 500(内部服务器 错误)

请帮帮我:(

【问题讨论】:

  • 开启错误,看看实际的500服务器错误是什么
  • 我被检查了。它的 csrf 不匹配错误:(

标签: ajax csrf laravel-5


【解决方案1】:

来自文档:

http://laravel.com/docs/master/routing#csrf-protection

“除了寻找 CSRF 令牌作为“POST”参数外,中间件还会检查 X-CSRF-TOKEN 请求头。”

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

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2015-10-13
    • 2015-08-28
    • 2015-04-27
    • 2019-01-25
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多