You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native中Facebook登录提示‘invalid scope:mail’问题排查

问题排查与解决方案

嗨,我来帮你梳理下这个问题~

首先,导致「invalid scope:mail」错误的直接原因是你写错了Facebook的权限名称!Facebook官方的邮箱权限是email,而不是你写的mail——这是个很容易犯的拼写小错误。

那为什么把代码移到Root组件里就正常了呢?大概率是你迁移代码的时候下意识修正了这个拼写错误,只是自己没留意到😉 当然也不排除组件生命周期的微小差异,但核心问题肯定是权限名称写错了。

接下来给你具体的修复步骤:

  • 修正权限拼写:把loginWithFacebook里的permissions:["mail", "public_profile"]改成permissions:["email", "public_profile"]
  • (可选但推荐)给登录逻辑加上完整的错误捕获,方便后续排查问题
  • (兜底检查)去你的Facebook开发者后台确认email权限已经被启用(一般默认是开着的,但保险起见可以看看)

修复后的loginWithFacebook函数示例:

async loginWithFacebook (){
  try {
    const {type, token} = await Expo.Facebook.logInWithReadPermissionsAsync(
      "2073519281256416", 
      {permissions:["email", "public_profile"]} // 这里修正了权限名称
    );
    if(type === "success"){
      const credentials = fire.auth.FacebookAuthProvider.credential(token);
      await fire.auth().signInWithCredential(credentials);
      console.log("登录成功!");
    }
  } catch (error) {
    console.error("登录过程出错:", error);
  }
}

另外补充个小细节:你在LoginScreen里用onPress={()=> this.loginWithFacebook()}的写法是没问题的,不用额外绑定this,可以继续用。

等你修正完权限拼写,LoginScreen里的登录逻辑应该就能和Root组件里一样正常工作了,Root里的onAuthStateChanged监听也能正常捕获到登录状态的变化~

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

火山引擎 最新活动