在我的Flutter应用程序中,我使用Firebase Auth包进行用户身份验证。当我登录时,一切似乎都工作了一段时间。但是过了一段时间(不确定是否正好是1小时),我在调试控制台中收到以下消息:
带Firestore(4587):(24.0.0)[FirestoreCallCredentials]:无法获取身份验证令牌:com.google.firebase.FirebaseException:发生内部错误。[无效_刷新_令牌]。带Firestore(4587):(24.0.0)[WatchStream]:(3351 d52)流已关闭,状态为:状态{code=UNAUTHENTICATED,description=null,cause=com.google.firebase.FirebaseException:发生内部错误。[无效_刷新_令牌]
从那时起,我无法访问任何Firebase服务。解决此问题的方法是注销并重新登录。
不确定这种行为是否会发生在生产中,以及我在开发中使用Firebase Emulators进行Auth和Firestore。
2条答案
按热度按时间r1wp621o1#
此错误可能有多种原因。我只是列出一些指针供您检查:
启用:
1.这可能是由禁用的电子邮件/密码登录(默认情况下禁用)导致的。如下所示在Firebase控制台中启用身份验证部分,或者您可以在Firebase控制台中临时尝试“anonymously”/ guest登录。
1.在Google Cloud Console中启用令牌服务API
1.启用Cloud Firestore API
如果您使用的是本地Authentication模拟器,则可以通过使用useAuthEmulator方法连接到本地Authentication模拟器,让您的应用与之对话。在Flutter库中,这已经登陆到firebase_auth包的0.20版本和更高版本中。
如果您使用的是本地Firestore模拟器,则可以通过使用useFirestoreEmulator方法连接到本地Firestore模拟器,让您的应用与本地Firestore模拟器进行对话。
更新:
对于任何访问此问题的人,上面的这些指针对我们的OP没有帮助,对她有帮助的是,将项目中的当前google-services.json与Firebase控制台在生成SHA-1密钥(为您的应用创建OAuth2客户端和API密钥)后生成的google-services.json进行比较。检查stackoverflow thread,它解释了如何添加SHA-1密钥。如果你想用终端来做这件事,看看这个article),结果发现它们不太一样。因此,将新的google-service.json添加到android/app下的项目中并执行
flutter clean
是一个技巧。nhaq1z212#
可能发生这种情况的另一个原因是关闭计算机上的模拟器进程。
Firebase模拟器在
firebase emulators:start
完成时清除数据。因此,OP可能在工作期间重新启动了他们的PC/MacBook,这可以解释它。
我决定把它贴在这里,因为有人可能会偶然发现这个问题,而不是像我一样思考它。