En la mayoría de los casos no es un problema de sesión, es de momento. Cuando alguien inicia sesión, la sesión se guarda en el navegador; al recargar la página, la librería de Supabase tiene que leerla de ahí y eso tarda unos milisegundos. Si tu código pregunta por el usuario nada más arrancar, pregunta antes de que la respuesta esté disponible. El usuario está perfectamente identificado y aun así ves este error. Se reconoce porque va y viene: al recargar falla, al navegar dentro de la app funciona.
El segundo caso es que la sesión se haya perdido de verdad. Pasa cuando el usuario vuelve de un enlace de confirmación de correo o de un inicio de sesión con Google y aterriza en una dirección que Supabase no tiene declarada como válida: el proyecto corta el proceso y la sesión no llega a establecerse.
El tercero es de navegador: la sesión se guarda en el almacenamiento local, y en modo incógnito o con la protección reforzada de Safari ese almacenamiento se limpia o se bloquea. Es la explicación cuando un usuario concreto se queja y a los demás no les pasa.