CSRF令牌不匹配| Laravel 5.4 [英] CSRF Token Mismatch | Laravel 5.4

查看:293
本文介绍了CSRF令牌不匹配| Laravel 5.4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我向服务器发送POST请求时,都会出现TokenMismatchException错误.我已经尝试发送

Whenever I send a POST request to server, TokenMismatchException error comes. I have already tried sending

<input type="hidden" name="_token" value= "{{csrf_token()}}">

以前,我使用ajaxHeader将此特定信息发送到服务器,但这也引发了相同的错误.

Earlier, I was using ajaxHeader to send this particular piece of information to server but that is also throwing same error.

我已经调试了更多东西,并在VerifyCsrfToken文件中找到了它.

I have debugged more and find out that in VerifyCsrfToken file.

protected function tokensMatch($request)
    {
        $token = $this->getTokenFromRequest($request);
        return is_string($request->session()->token()) &&
               is_string($token) &&
               hash_equals($request->session()->token(), $token);
    } 

array:3 [
 "sessionToken" => "rgicYLOUhb2kLLChpVByNLQO1KVMb0Gkjzb7ZtTN" //$request->session()->token()
 "requestToken" => "IgXWquvnfujZJ1Vs9vbSgpjgX3rAnd5PpeklRvBD"  // $request->input('_token') ?: $request->header('X-CSRF-TOKEN')
 "laravel_token" => "rgicYLOUhb2kLLChpVByNLQO1KVMb0Gkjzb7ZtTN" //csrf_token()
]

我在中间件令牌匹配功能中超出了数组.有人可以告诉我这个特殊问题的原因和解决方案吗? 下面是我正在使用的Ajax

I am getting above array in middleware token match function. Can anybody please tell me the reason and solution of this particular problem ? Below is the ajax I am using

function likeReview(id)
    {
        var like_span = $('#like_'+id);
        var like_div  = $('#likeDiv_'+id);
        var like_span_text = $('#likeText_'+id);
        $.ajax({
            type: 'post',
            url: '{{route('like.review')}}',
            data: {review_id: id},
            beforeSend: function () {
            },
            success: function (data) {
                if(data.status == 'success')
                {
                    var like = like_span.html();
                    var sum  = 0;
                    if(data.like == 1){
                        sum = parseInt(like)+1;
                        like_div.addClass('upvoted-active');
                        like_span_text.html('UPVOTED');
                    } else {
                        sum = parseInt(like)-1;
                        like_div.removeClass('upvoted-active');
                        like_span_text.html('UPVOTE');
                    }
                    like_span.html(sum);
                }
            },
            error: function (xhr, textStatus, thrownError) {
                alert('Something went wrong. Please try again!');
            }
        });
    }

点击升级按钮会调用功能

Function is called on click of upvote button

<div class="js-btn-thank-area upvoted-active js-activity-root" id="likeDiv_{{$review->id}}">
    <a href="javascript:;" onclick="likeReview({{$review->id}})" class="thank-btn">
    <i class="fa fa-arrow-up fa-fw"></i>
    <span class="feed-action-text" id="likeText_{{$review->id}}">UPVOTED</span>
   </a>
   <div class="stats-thanks" id="like_{{$review->id}}">                                                                    
    {{$review->likes()->where('like','=',1)->count()}}
   </div>
 </div>

推荐答案

仅将CSRF用作通过AJAX发布的字段是不起作用的;

Just using CSRF as a field for posting with AJAX does not work;

$.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } });

在进行ajax调用之前,先将其设置为:)!

Before you make the ajax call set it up :)!

编辑:您还可以将ajax请求的数据部分放入其中;

EDIT: You can also put in the data part of your ajax request;

data: {
    review_id: id,
    "_token": "{{ csrf_token() }}"
}

编辑:为了澄清清除storage中的临时数据,在聊天中解决了此问题.

EDIT: To clarify clearing temporary data from storage solved this issue in chat.

这篇关于CSRF令牌不匹配| Laravel 5.4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆