Flutter FirebaseAuth 令牌问题

Flutter FirebaseAuth token issue

[FirestoreCallCredentials]:获取令牌失败:com.google.firebase.FirebaseException:发生内部错误。 [ 对此 API securetoken.googleapis.com 方法的请求 google.identity.securetoken.v1.SecureToken.GrantToken 被阻止。 ].

我尝试在 CloudFirestore 中创建、更新或删除文档时收到此错误。但是,我在大约 1 小时后收到了此邮件。 Goolge Cloud Console 中的 OAuth 已启用,令牌服务 API 也已启用。

此错误可能有多种可能性和原因。我列出其中的一些,供您查看、分析和试用。

解决方案一:

要配置 API 限制,请转到凭据页面 [https://console.cloud.google.com/apis/credentials],然后按照以下说明操作:

  1. 点击API键进行配置
  2. Select 限制 API 限制部分中的密钥。
  3. Select 您的 API 密钥需要从下拉列表中调用的所有 API 名称 - “Identity Toolkit API”,“令牌服务 API ”
  4. 保存更改。

您还可以参考这些文档[1][2],了解如何管理 Firebase 的 API 密钥。

[1]https://firebase.google.com/docs/projects/api-keys
[2]https://cloud.google.com/docs/authentication/api-keys

方案二:

在Firestore规则中正确设置auth的要求。请参阅 Cloud Firestore 安全规则入门。

如果需要身份验证,您可以通过以下方式设置 firestore 规则:

rules_version = '2'; 
service cloud.firestore { 
match /databases/{database}/documents { 
match /{document=**} {
 allow read, write:
 if request.auth != null;
 } } }

解决方案 3:

如果您使用方法 getIdToken 调用和检索 Firebase 令牌 ID,则需要执行以下操作:

FirebaseUser user = await FirebaseAuth.instance.currentUser();
String token;
user.getIdToken().then((result) {
token = result.token;
});

您不能调用 FirebaseAuth.instance.currentUser().getIdToken(),因为它不起作用。