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
。
这可能是 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
。