Laravel 5,ajax,500 Internal Server Error,VerifyCsrfToken.php第46行中的TokenMismatchException: - php

我在弹出警报中使用带有ajax帖子的Laravel 5,它给了我错误“ 500 Internal Server Error”,当我检查Firebug时,我发现ajax返回了一个错误页面,上面显示“ VerifyCsrfToken.php第46行中的” TokenMismatchException”: ”

当我评论App\Http\Middleware\VerifyCsrfToken时,它可以正常工作,但是我认为不建议这样做,我打印_token变量,并且它不为空
ajax的邮政编码是:

 $('#demo_4').click(function(){
        bootbox.prompt("What is your name?", function(result) {
            if (result === null) {
                alert("Prompt dismissed");
            } else {
                // alert("Hi <b>"+result+"</b>");
                $.ajax({
                    url: 'test',
                    type: "post",
                    data: {'name':result, '_token': $('input[name=_token]').val()},
                    success: function(data){
                        alert(data);
                    }
                });
            }
        });
    });

路线代码为:

Route::post('test', 'AccountController@login');

AccountController代码为:

<?php
namespace App\Http\Controllers;
use Input;
use Request;
use App\Http\Controllers;

class AccountController extends Controller 
{

    public function login()
    {

        if (Request::ajax()) {
            $data = Input::all();
            print_r($data);
            die;
        }

    }
}

参考方案

您需要将此行插入表单

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

或将此添加到控制器

use Illuminate\Support\Facades\Session

请启用调试器并提供Laravel5调试器显示的内容以详细说明。

在ajax调用中,将此添加到data选项:

'_token':$('input[name=_token]').val()

或以全局方式添加

<meta name="_token" content="{!! csrf_token() !!}"/>

并添加到页脚:

<script type="text/javascript">
    $.ajaxSetup({
        headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
    });
</script>

UPD:至控制器

use Input;
use Request;
class AccountController extends Controller {
    public function login() 
    {
    // Getting all post data
    if(Request::ajax()) {
        $data = Input::all();
        print_r($data);die;
    }
}

UPD2:尝试将其添加到您的主布局

<meta name="_token" content="{!! csrf_token() !!}"/>

<script type="text/javascript">
    $.ajaxSetup({
        headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
    });
</script>

检查您的Web服务器已经具有对会话目录的写访问权,可以为app/storage/framework/sessions/
执行

rm -f {your_web_app}/storage/framework/sessions/*

重新加载Web服务器。

在某些情况下,请使用以下代码检查app/Http/Middleware/VerifyCsrfToken.php中的tokensMatch方法:

$token = $request->ajax() ? $request->header('X-CSRF-Token') : $request->input('_token');

return $request->session()->token() == $token;

并为此检查javascript文件:

// CSRF protection
$.ajaxSetup(
{
    headers:
    {
        'X-CSRF-Token': $('input[name="_token"]').val()
    }
});

Laravel Blade模板尝试获取非对象的属性时如何返回null而不是ErrorException - php

我正在编写一些Laravel Blade模板,并且我的模型可能包含空对象。我非常想尝试获取对象属性,如果有错误,则返回null。因此,不必编写以下代码:@if ($model->child_object_that_may_be_null) {{ $model->child_object_that_may_be_null->interesti…

Laravel-无需登录即可认证用户 - php

在laravel 5.4中,可以在不登录用户的情况下对用户进行身份验证吗?从laravel doc中,我能找到的最接近的东西是:Auth::once($credentials) 但这仍然使该用户感到厌烦。我需要做的就是只是知道使用该电子邮件和密码的用户是否存在。 参考方案 您可以将Auth::attempt函数与第三个参数用作false进行登录 $email…

Laravel 5错误报告抑制 - php

在Laravel 4中,抑制E_NOTICE消息很容易;我似乎无法做到这一点,因为如果我添加error_reporting(E_ALL ^ E_NOTICE) 它只是被覆盖的任何地方。这似乎发生在这里:(index.php)$response = $kernel->handle( $request = Illuminate\Http\Request::…

Laravel 5排序具有关系的雄辩模型 - php

我有一个要基于关系属性进行排序的模型。主模型Resultado具有类型respondente的关系belongsTo,而respondente具有关系usuario。我想获取具有这些关系的Resultado并按usuario name属性(列)对结果进行排序。我试过了$resultados = Diagnostico\Resultado::with(…

Laravel-使用雄辩的语言在开始日期和结束日期之间选择行 - php

我想将此查询转换为雄辩的laravel,select * from schedule where (now() between start_date and end_date); 我尝试使用whereBetween,但是出现了一些错误。$schedule = Schedule::whereBetween(Carbon::now(), ['start…