Fetching Laravel

What? Last night, shamelessly enough, I spent about 3 hours figuring this out. I was working on a Laravel site that has a concept of “companies”. The companies.index view simply lists all companies in the database (no pagination). I wanted to add a search functionality that would update the HTML table as the user types in the query.

Issue

When I was sending an AJAX request using the fancy fetch() API, Laravel would respond with 404 without any particular reason. I did not query an API route, neither did I use the api middleware group. I just wanted to use the same session-based authentication that I already had in place.

Solution

Turns out, the fetch() API does not attach cookies to the request by default. Laravel was receiving a request which could not be identified (no cookies = no session identifier), therefore was not able to recognise the logged in user. In order to send the cookies along with the request, you need to set credentials: 'same-origin' in the fetch’s configuration object. The call looks like this:

fetch(url, {
    credentials: 'same-origin',
});

Now, the request will contain the necessary cookies and the Laravel authentication system will be able to identify the user. 🎉

Feel free to reach out to me on twitter.

© 2020 Jerguš Lejko