好的,让我先解释一下。我正在使用像这样的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中排除该特定路由,则无论中间件与否,它都将返回正确的响应。
我的问题是,问题出在哪里,我该如何解决?谢谢:)