java - 启用“setTimestampsInSnapshotsEnabled”后的服务帐户身份验证警告
问题描述
问题
根据 Firebase Timestamp警告将我的 AppEngine 托管应用程序的Date对象更新为Timestamp对象并启用有关使用服务身份验证帐户的新警告后显示。setTimestampsInSnapshotsEnabled
但是,我目前在根据Initialize Cloud Firestore子部分initialize on your own server部分下的文档初始化 Firebase 时使用服务身份验证帐户。尽管有新的警告消息,该应用程序仍按预期工作。
原始“setTimestampsInSnapshotsEnabled”警告
存储在 Firestore 中的 java.util.Date 对象的行为将发生变化,您的应用程序可能会中断。要隐藏此警告并确保您的应用不会中断,您需要在调用任何其他 Cloud Firestore 方法之前将以下代码添加到您的应用中:
FirestoreOptions options = FirestoreOptions.newBuilder().setTimestampsInSnapshotsEnabled(true).build(); Firestore firestore = options.getService();
通过此更改,存储在 Cloud Firestore 中的时间戳将作为 com.google.cloud.Timestamp 对象而不是系统 java.util.Date 对象读回。因此,您还需要将期望 java.util.Date 的代码更新为期望时间戳。例如:
// Old: java.util.Date date = (java.util.Date) snapshot.get("created_at"); // New: Timestamp timestamp = (Timestamp) snapshot.get("created_at"); java.util.Date date = timestamp.toDate();
请在启用新行为时审核 java.util.Date 的所有现有用法。在未来的版本中,该行为将更改为新行为,因此如果您不遵循这些步骤,您的应用程序可能会中断。
新服务帐户身份验证警告
2018 年 12 月 9 日下午 12:54:39 com.google.auth.oauth2.DefaultCredentialsProvider warnAboutProblematicCredentials 警告:您的应用程序已使用来自 Google Cloud SDK 的最终用户凭据进行身份验证。我们建议大多数服务器应用程序改用服务帐户。如果您的应用程序继续使用来自 Cloud SDK 的最终用户凭据,您可能会收到“超出配额”或“API 未启用”错误。有关服务帐户的更多信息,请参阅https://cloud.google.com/docs/authentication/。
设置
初始化 Firebase
FirebaseApp.initializeApp(FirebaseOptions.Builder()
.setCredentials(
fromStream(Gson().toJson(FirebaseCredentialsHelper.get()).byteInputStream()))
.setFirestoreOptions(FirestoreOptions.newBuilder()
.setTimestampsInSnapshotsEnabled(true).build())
.build())
服务凭证对象
FirebaseCredentialsHelper返回服务帐户凭据,具体取决于应用是在暂存模式还是在生产模式下构建。
return FirebaseCredentials(
"service_account",
"[project-id]",
"[private-key-id]",
"[private-key]",
"[client-email]",
"[client-id]",
"https://accounts.google.com/o/oauth2/auth",
"https://accounts.google.com/o/oauth2/token",
"https://www.googleapis.com/oauth2/v1/certs",
"[client-x509-cert-url]"
)
解决方案
推荐阅读
- c# - 我应该如何释放在 Rust 中分配的 C# byte[]?
- c - 使用 fgets() 和 gets() 字符串函数来查看它们的区别。但是,使用字符串时遇到缓冲区问题
- java - BeanShell 脚本错误:bsh.ParseException:第 126 行第 23 列的解析错误。遇到:,
- javascript - 如何找到用户发送的自定义表情符号的 ID 并将其添加到服务器?
- circleci - CircleCI 上传到 Codecov 不起作用
- javascript - 如何在本机反应中将签名的base64编码png上传到服务器
- java - 使用 Autowired 创建对象实例
- java - 拍照并将其保存到图库而不是应用程序文件
- java - 我想用几何和弹簧靴找到距离较近的汽车
- javascript - 无法分配给 React.js 中的只读属性