You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native+Expo的Supabase Facebook认证中获取大尺寸头像?

解决Supabase Facebook认证头像尺寸过小的问题

直接修改JWT里的头像URL参数无效,是因为Facebook的头像URL规则特殊,默认返回的小图URL不支持直接调整尺寸。可以按以下两种方式解决:

方法一:通过Facebook Graph API获取大尺寸头像

登录成功拿到Facebook的access_token后,直接调用Graph API请求指定尺寸的头像:

具体实现:

在现有登录逻辑中,添加获取大图的代码:

async function login() {
  const { data, error } = await supabase.auth.signInWithOAuth({
    provider: 'facebook',
  })
  if(data?.url) {
    let result = await WebBrowser.openAuthSessionAsync(data.url, Linking.createURL())
    if(result.type == 'success') {
      const access_token = result.url.split('#')[1].split('&')[0].replace('access_token=', '')
      
      // 新增:请求大尺寸头像
      const avatarRes = await fetch(`https://graph.facebook.com/v18.0/me/picture?width=200&height=200&redirect=false&access_token=${access_token}`)
      const avatarData = await avatarRes.json()
      const largeAvatarUrl = avatarData.data.url

      // 可选:将大图URL更新到Supabase用户元数据
      await supabase.auth.updateUser({
        data: { avatar_url: largeAvatarUrl }
      })

      await SecureStore.setItemAsync('access_token', access_token)
      // 可选:将大图URL存本地
      await SecureStore.setItemAsync('avatar_url', largeAvatarUrl)
    }
  }
}
  • redirect=false让接口返回JSON格式数据,直接提取大图URL
  • width和height可按需调整(比如400×400)

之后无论从Supabase用户信息还是本地存储中读取,都是大尺寸头像。

方法二:修改Supabase OAuth配置(直接获取大图)

如果希望Supabase在认证阶段直接获取大尺寸头像,可在初始化Supabase时配置Facebook provider的参数:

const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {
  auth: {
    providers: {
      facebook: {
        options: {
          authUrlParams: {
            // 指定获取大尺寸头像字段
            fields: 'id,name,picture.width(200).height(200)'
          }
        }
      }
    }
  }
})

这样Supabase在拉取用户信息时,会直接拿到Facebook返回的大尺寸头像URL,JWT中的avatar_url就会是大图地址。

注意:需确保Supabase的OAuth配置已包含public_profile权限(默认已自带),否则无法获取头像字段。


内容的提问来源于stack exchange,提问作者Ryan Clare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:22:46