php - Laravel 5,ajax,500 内部服务器错误,VerifyCsrfToken.php 第 46 行 : 中的 TokenMismatchException

标签 php jquery ajax laravel laravel-5

我在弹出警报中使用 Laravel 5 和 ajax post,它给了我错误“500 内部服务器错误”,当我检查 firebug 时,我发现 ajax 返回一个错误页面,显示“VerifyCsrfToken.php 中的 TokenMismatchException”第 46 行:“

当我评论 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(); ?>">

或者将其添加到 Controller

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:到 Controller

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>

检查您的网络服务器是否已经具有对 session 目录的写入权限,它可以是app/storage/framework/sessions/。 执行

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

重新加载网络服务器。

在某些情况下,使用以下代码检查 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()
    }
});

关于php - Laravel 5,ajax,500 内部服务器错误,VerifyCsrfToken.php 第 46 行 : 中的 TokenMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30460791/

相关文章:

php - Facebook登录阻止了一个框架问题

php - 在 jQuery 中附加一个 html 链接

jquery - $(function () { 中的多个 jQuery 事件 ...只有第一个有效

javascript - jquery 计算给定动态填充容器的高度/宽度

javascript - 向 Flask 应用程序发出 AJAX 请求

html - 关于安全产品GUI布局的建议

javascript - 如何为动态创建的输入框应用自动完成

javascript - 如何从 Summernote 中删除工具提示

javascript - 在事件上运行 javascript 文件

javascript - 新的数据库元素只能通过刷新整个页面来显示