首页 > 解决方案 > 使用 Ajax 的 Laravel 419 错误

问题描述

好吧,我先解释一下。我正在使用这样的 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 中排除该特定路由,它会返回带有中间件和不带有中间件的正确响应。

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

标签: ajaxlaravel

解决方案


推荐阅读