I’m using Laravel version 7.11.0 and this is the scenario
- User logs into his account
- User doesn’t do anything on the webpage for a while so his session expires
- The user hits a button on my webpage that sends a Post request via Ajax to a route that can only be used by authenticated users
- Laravel correctly blocks that request because the user is not logged in
If that happens I would like to redirect that user to the login page. I know Laravel can do that but it isn’t working when I’m using Ajax. So how can this be done when using Ajax ? Thanks in advance.
The Route definition:
JavaScript
x
Route::group(['middleware' => ['auth','throttle:20,1']], function() {
Route::post('/searchProduct','ProductController@searchProduct')->name('searchProduct');
});
The Ajax Request
JavaScript
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'POST',
url: '/searchProduct',
data: {
search_term: $(".search_term").val()
},
success: function (data) {
console.log(data.msg);
},
error: function (data) {
console.log(errors.message);
}
});
Advertisement
Answer
As user is logged out you will retrieve an error. Than if you can make another ajax call that will check if user is logged in:
JavaScript
// Laravel
return auth()->check()
If this request receives false
then you can redirect him to login page