Laravel 419使用Ajax时出错

时间:2018-07-06 16:59:16

标签: ajax laravel

好的,让我先解释一下。我正在使用像这样的ajax发送PUT请求:

//ajax function
$(document).on("click", ".question_no", function(){
  current_color = rgb2hex($(this).css('background-color'));
  q_index = $(this).attr('id').slice(5);
  id_team_packet = $("#id_team_packet").val();
  // startTimer();
  if (current_color != '#ffc966') {
    $(this).css('background-color', "#ffc966");

    var status = "orange";

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

    $.ajax({
      url: '{{route('peserta.submit.ans.stat')}}',
      method: 'put',
      data: {q_index, id_team_packet},
      success: function(data){
        console.log(data)
      }
    })
  }
})

注意我已经在脑海里有了CSRF令牌设置,也包括在我的ajax设置中,如下所示。它很好用:)。但是一旦我使用中间件保护了该路由,就这样:

 //middleware
 public function handle($request, Closure $next)
    {
      if (Auth::user()) {
        if (Auth::user()->role == 3) {
          return $next($request);
        }
         if ($request->ajax()) {
           return response()->json(['intended_url'=>'/'], 401);
         }
        return redirect('/');
      }
       if ($request->ajax()) {
         return response()->json(['intended_url'=>'/'], 401);
       }
      return redirect('/');
    }

//web.php
Route::middleware(['participant_only'])->group(function(){
  Route::put('/peserta/submit-answer-status', 'PesertaController@submitAnsStat')->name('peserta.submit.ans.stat');

});

如您所见,它仅接受角色为“ 3”的登录用户。如果用户尝试登录,它将重定向到'/'。现在,我还检查了请求是否使用了ajax,它返回了一条代码为401的消息。但是不幸的是,当应用了中间件并将其ajax时,它返回了此错误:

message 
exception   Symfony\Component\HttpKernel\Exception\HttpException
file    -\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php
line    203

但是,一旦我删除了中间件,它就会起作用。我不知道问题出在哪里。哦,另外请注意,如果我从verifycsrftoken中排除该特定路由,则无论中间件与否,它都将返回正确的响应。

我的问题是,问题出在哪里,我该如何解决?谢谢:)

0 个答案:

没有答案