我已经在这个问题上苦苦挣扎了一段时间了,我终于放弃寻找答案,决定问自己的问题。
我有一个 Ionic 7 Vue 应用,我在其中使用 Firebase Auth 进行用户管理。我的代码在浏览器和 Android 上完美运行,并且我可以成功登录用户。但是在 iOS 设备或模拟器上它不起作用。
当用户登录时,我会触发以下函数(请注意,auth 对象是有效的,只是未在此处显示):
import {signInWithEmailAndPassword, UserCredential } from "firebase/auth";
const signInUser = async (email: string, password: string) => {
try{
const res = await signInWithEmailAndPassword(auth, email, password)
console.log("Successfully logged in with Firebase, UID: "+res.user.uid)
}
catch(error){
const errorCode = error.code;
const errorMessage = error.message;
console.error("Error Code: " + errorCode + " - Error Message: " + errorMessage);
}
}
错误条件成功触发,console.log 显示正确的错误。例如,如果我输入了错误的密码,它会在 console.logs 中记录一条消息。
但是,如果我输入正确的密码和电子邮件,try block 中的 console.log 将永远不会执行。它只是卡在那里,什么都不做,就好像等待的 promise 永远不会解决一样。我也看不到 Xcode 输出中抛出任何错误。
一个有趣的注释是,在 Firebase 控制台中,它显示登录确实发生了。这一切都向我表明它实际上正在工作,但不知何故我没有以某种方式正确处理已解决的 promise 。
我希望我只是在一些琐碎的事情上犯了傻,并且这里有人会指出一些错字或其他东西。或者有人知道解决此问题的一些方法。
最佳答案
理想情况下,此代码应该可以正常工作,因为您发布的代码与浏览器或设备无关。但我可以建议一个解决方法来尝试一下,您可以尝试使用 promise
而不是 async/await
来查看问题是否仍然存在。
通过执行此操作,您将了解问题是否具体与 async/await
行为有关。
const signInUser = (email: string, password: string) => {
signInWithEmailAndPassword(auth, email, password)
.then(res => {
console.log("Successfully logged in with Firebase, UID: "+res.user.uid)
})
.catch(error => {
console.error("Error Code: " + error.code + " - Error Message: " + error.message);
})
}
如果上述方法不起作用,请检查 iOS
上是否应用了任何安全措施来执行 Firebase 身份验证,方法是查看您的设备是否具有必要的网络访问权限。
关于javascript - SignInWithEmailAndPassword (Ionic/Vue/Firebase) 无法解决 iOS 中的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76855485/