For anything SPA-related, Laravel Sanctum is the package that was written specifically for this purpose: https://laravel.com/docs/9.x/sanctum.
Setting everything up can be quite a few steps, so I would recommend using Laravel Breeze with the API option as a starting point for your Laravel backend: https://laravel.com/docs/9.x/starter-kits#breeze-and-next. This sets up all your auth endpoints like logging in, registering and password resets. It also sets up most of the configuration outlined in the Sanctum docs.
Laravel also has a reference Next.js app as an example front-end for how to communicate with the Breeze/Sanctum backend: https://github.com/laravel/breeze-next. You'll see how to do things like actually logging in, getting the csrf cookie/token, etc.
I would try to get both apps running locally and working with each other so you can start to see how auth works with this SPA architecture.
There are also a few Laracasts videos available: https://laracasts.com/series/andres-larabits/episodes/12
One from the Nuxt series that sets up Sanctum/Breeze with Nuxt: https://laracasts.com/series/nuxtjs-crash-course/episodes/8