React Native AppleID认证开启「隐藏我的邮箱」后email返回null问题
Apple ID登录开启「隐藏我的邮箱」后返回email为null的解决方法
环境
- 模拟器:iPhone 14 Pro
- 使用依赖:@invertase/react-native-apple-authentication
问题描述
我通过以下代码实现Apple ID登录:
let appleAuthRequestResponse = await appleAuth.performRequest({ requestedOperation: appleAuth.Operation.LOGIN, requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME], }) console.log('Email: ', appleAuthRequestResponse.email) // 获取到null
开启「隐藏我的邮箱」选项后,返回的email = null,该如何解决这个问题?
解决方法
- 通过
currentUser获取转发邮箱
当用户开启「隐藏我的邮箱」时,Apple会生成一个隐私转发邮箱,这个邮箱不会直接在登录请求的返回结果中,但可以通过appleAuth.currentUser获取。示例代码:
// 执行登录请求后 const currentUser = appleAuth.currentUser; if (currentUser) { console.log('隐私转发邮箱:', currentUser.email); }
区分首次与后续登录场景
首次登录时,即使用户开启隐藏邮箱,登录请求返回结果里会包含转发邮箱;但用户后续再次登录(比如退出后重新登录)时,返回结果的email会是null,此时必须通过currentUser获取邮箱信息。服务器端解析ID Token获取邮箱
如果需要持久化用户邮箱,建议在服务器端验证Apple返回的ID Token,解析Token中的email字段,这里会返回用户的隐私转发邮箱,同时is_private_email字段会标记该邮箱是否为隐私邮箱,可用于业务逻辑判断。
内容的提问来源于stack exchange,提问作者spatak
相关产品推荐
相关产品推荐

