¿Hay alguna forma de obtener la sesión y el perfil del usuario al mismo tiempo? La forma en que lo hice sería obtener la sesión de usuario primero después de iniciar sesión y luego buscar el perfil de usuario usando la identificación.
const [authsession, setSession] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(false); useEffect(() => { const userSession = supabase.auth.session(); setSession(userSession); if (userSession) { getProfile(userSession.user.id); } else { setSession((s) => ({ ...s, profile: null })); } supabase.auth.onAuthStateChange((_event, session) => { setSession(session); if (session) { getProfile(session.user.id); } else { setSession((s) => ({ ...s, profile: null })); } }); }, []); const getProfile = async (id) => { setLoading(true); setError(false); try { const { data } = await supabase .from("profiles") .select("*") .eq("id", id) .single(); setSession((s) => ({ ...s, profile: data })); } catch (error) { setError(true); } finally { setLoading(false); } };El objeto session.user contiene una propiedad llamada user_metadata : esta propiedad contiene los datos que están presentes en la columna raw_user_meta_data de la tabla de auth.users .
Por lo tanto, puede configurar un activador de base de datos en su tabla de perfil de usuario personalizada que copia los datos de esa tabla en la columna raw_user_meta_data de la tabla de auth.users en formato JSON cada vez que cambien los datos en la tabla de perfil de usuario (es decir, necesitará el disparador para ser ejecutado en INSERTAR/ACTUALIZAR y probablemente DELETE declaraciones). De esta forma, los datos del perfil se entregarán automáticamente al cliente con los eventos de inicio de sesión o actualización del token.
IMPORTANTE: Este enfoque tiene inconvenientes potenciales: