【问题标题】:Message: "CSRF token mismatch.", exception: "Symfony\Component\HttpKernel\Exception\HttpException",…}消息:“CSRF 令牌不匹配。”,异常:“Symfony\Component\HttpKernel\Exception\HttpException”,...}
【发布时间】:2020-10-21 17:29:50
【问题描述】:

我是一名 PHP 开发人员,目前根据我的任务正在转向 Laravel 框架,我必须使用 ajax 完成实时表,但我遇到了一个错误,即 CSRF 令牌不匹配错误,请帮助我解决我发布的错误仅短代码

JAVA 脚本

<script>

 function getMessage() {
        $.ajax({
           //var data = {"_token": $('#token').val()},
           type:'POST',
           url:'/getMsg',
           headers: {'XSRF-TOKEN': $('meta[name="_token"]').attr('content')},
           success:function(data) {
              $("#msg").html(data.msg);
           }
           
        });
        
     }
    
  </script>

路线路径

Route::post('/getMsg','CustomerSearchController@doAjaxTest');

控制器代码

public function doAjaxTest(){
    $msg = "<b>Message over ajax This test is Successful</b>.";
    return response()->json(array('msg'=> $msg), 200);
}

HTML 代码

<center>
 
 <input type = "hidden" name = "_token" value = '<?php echo csrf_token(); ?>'>
 <table>
 <tr>
 
 <td><label>Enter Place Name</label></td>
 <td><input type="text" class="form-control" id="placename" name="placename" placeholder="Name Of Place"/></td>
 </tr>
 <tr>
 <td>
 <input type="submit" value="Get Message" onclick="getMessage()" />
 </td>
 </tr>
 </table>

 <br>
 <!--
 <div class="panel panel-default table-responsive">
            <div id="dataTag"><b>All the Details according to department will be displayed</b></div>
            
      </div>
 -->
 <div id = 'msg'>This message will be replaced using Ajax. 
     Click the button to replace the message.</div>
  </center>

我不知道为什么当标头包含令牌时它显示 CSRF 令牌不匹配 一旦解决,我可以采取一些实时行动,请帮忙

【问题讨论】:

  • 您的代码中的 XSRF-TOKEN 是什么?这 $('meta[name="_token"]').attr('content') 返回令牌吗?为什么是“内容”而不是“价值”?在您的 ajax 中发送正确的数据: $.ajax({data: {_token: $('input[name=_token]').val(), placename: $('input[name=placename]').val() }, type: 'post', url: '...', success: function() {...}}. 使用调试器或 console.log() 仔细检查您发送的数据是否正常,如果有地名和_token。
  • 请重写上面的代码,这样我的基础就可以清除了

标签: php ajax laravel-5 csrf csrf-token


【解决方案1】:

如果您已经配置了标头,但仍然无法使用,请尝试创建一个新密钥:

php artisan key:generate

【讨论】:

    【解决方案2】:

    确保您的视图头部有元标记:

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

    然后你可以在加载jQuery库后初始化一次,添加这个:

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

    尝试解决方案

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我将 .env 文件中的 APP_NAME 更改为默认值(Laravel)。试试看。

      【讨论】:

        猜你喜欢
        • 2018-09-25
        • 2015-03-14
        • 2019-03-01
        • 2021-12-19
        • 2021-01-19
        • 1970-01-01
        • 2019-10-17
        • 2018-03-25
        • 2018-07-21
        相关资源
        最近更新 更多