无法从Supabase的profiles1表获取数据,请求排查问题
问题排查与修复方案
1. 渲染页面核心问题:getUser() 未异步等待
supabase.auth.getUser() 是异步方法,直接调用会返回Promise对象,而非用户数据,导致user.id始终为undefined,后续查询条件不成立,自然无法获取数据。
修复后的渲染页面查询逻辑:
const fetchUserInfo = async () => { try { // 用await获取真实的用户认证数据 const { data: { user }, error: authError } = await supabase.auth.getUser(); if (authError) { console.error('获取用户认证信息失败:', authError.message); return; } if (user?.id) { const { data, error } = await supabase .from('profiles1') .select('*') .eq('user_id', user.id) .single(); if (error) { console.error('获取用户信息失败:', error.message); } else { setUserInfo(data); } } else { setUserInfo(null); } } catch (error) { console.error('获取用户信息出错:', error.message); } };
2. 管理页面:确认user_id关联逻辑
你提到数据库会自动插入user_id,需先验证该自动逻辑是否生效:
- 检查
profiles1表的user_id字段是否设置了默认值为auth.uid() - 或是否存在触发器自动填充当前认证用户ID
若自动逻辑未生效,需手动在插入时传入当前用户ID:
修复后的管理页面插入逻辑:
const handleSaveResume = async () => { try { const { data: { user }, error: authError } = await supabase.auth.getUser(); if (authError) { Alert.alert('错误', '请先完成登录'); return; } const { data, error } = await supabase.from('profiles1').insert([ { name, phoneNumber, email, education, workExperience, skills, user_id: user.id // 手动关联当前用户ID }, ]); if (error) { Alert.alert('错误', error.message); } else { Alert.alert('成功', '简历已保存'); } } catch (error) { console.error('保存简历出错:', error.message); } };
3. 额外检查:行级安全策略(RLS)
若profiles1表开启了行级安全,需确保策略允许:
- 认证用户插入自身数据
- 认证用户查询自身数据
可在Supabase SQL编辑器中添加如下策略:
-- 允许认证用户插入自己的简历 CREATE POLICY "用户可插入自身简历" ON profiles1 FOR INSERT TO authenticated WITH CHECK (user_id = auth.uid()); -- 允许认证用户查看自己的简历 CREATE POLICY "用户可查看自身简历" ON profiles1 FOR SELECT TO authenticated USING (user_id = auth.uid());
内容的提问来源于stack exchange,提问作者androidenthusiast
相关产品推荐
相关产品推荐

