getAuth().onAuthStateChanged 未调用,异步未在电容器中解析?

getAuth().onAuthStateChanged not called, async not resolving in capacitor?

这可能是 firebase 问题或 promises 的电容器问题 - 我正在使用电容器和 NextJS 构建一个 iOS 应用程序。

我发现异步函数(至少对于 firebase)即使成功也没有完成,例如从 firebase 调用 'createUserWithEmailAndPassword' 成功(该帐户是在 firebase 上创建的)但是它没有解决,

onClick={() => { console.log("开始注册"); 设置加载(真) 尝试 { createUserWithEmailAndPassword(getAuth(), email, password).then(data => {

                }).catch(e => {
                    setError(JSON.stringify(e))
                }).finally(() => setLoading(false))
            }
            catch (e) {
                console.log(JSON.stringify(e));
                setLoading(false);
            }
        }}

这个函数在标准的 nextjs 环境中运行良好,所以逻辑已经过验证,让我认为它可能与 capicitor 中的异步函数有关。

我也单独有一个回调函数:getAuth().onAuthStateChanged 和 getAuth().onIdTokenChanged,它们从未被调用过。

更新:我使用 proxyman 检查网络流量 - 登录请求成功返回有效负载,但在电容器端它没有解析(即调用 'then' 或在 firebase 身份验证上设置用户).

您似乎遇到了以下问题:https://github.com/robingenz/capacitor-firebase-authentication/issues/78

这就是解决方案(来源:harryherskowitz.com):

function whichAuth() {
  let auth
  if (Capacitor.isNativePlatform()) {
    auth = initializeAuth(app, {
      persistence: indexedDBLocalPersistence
    })
  } else {
    auth = getAuth()
  }
  return auth
}

export const auth = whichAuth()

初始化auth时必须将indexedDBLocalPersistence设置为persistence