0

我们最近通过 Google、Apple 和 Facebook 提供商将 Firebase Auth 集成到我们的应用程序中。在 Android 上,所有提供程序都能完美运行。在 iOS 上,所有提供程序在新部署到 App Store(试飞)时都能完美运行。

我们的应用程序运行在带有 Capacitor 3 的 Ionic 5 框架上。当我们需要更新应用程序时,我们使用 Ionic AppFlow 进行直接代码推送,因此我们不必每次都部署到商店。

当我们推送我们的第一个 AppFlow 代码更改时,Apple 登录仅在 iOS 上停止工作。它返回“缺失或无效随机数”的错误。我们已经确保每个请求都会生成一个新的随机数,所以我们知道总是有一个值并且它们总是不同的。

await signInWithCredential(auth, credential); //returns missing-or-invalid-nonce

我们正在使用电容器-firebase-authentication电容器 3 包来帮助我们。

当从生成 nonce 值的包中仔细查看 Swift 代码时,它是ios 的 firebase docs auth的精确副本。

在这一点上,我们不知道这是否是 Firebase 或 Apple 或 Ionic App Flow 或电容器-firebase-authentication 包的问题。我们认为 App Flow 推送会更改应用程序的二进制文件,因此 nonce 生成与从 firebase 传回的凭据的预期不匹配。

这是我们正在使用的代码。

result = await FirebaseAuthentication.signInWithApple();
const provider = new OAuthProvider("apple.com");
credential = provider.credential({
   idToken: result.credential?.idToken,
   rawNonce: result.credential?.nonce,
});
const auth = getAuth();
await signInWithCredential(auth, credential); //this is where invalid nonce happens

有谁知道我们如何更改我们的随机数生成代码以不依赖应用程序二进制文件?我们认为它与这段代码有关,但我们不确定它是什么。

@available(iOS 13, *)
private func sha256(_ input: String) -> String {
  let inputData = Data(input.utf8)
  let hashedData = SHA256.hash(data: inputData)
  let hashString = hashedData.compactMap {
    String(format: "%02x", $0)
  }.joined()

  return hashString
}

任何帮助是极大的赞赏。

4

0 回答 0