我知道对此有几个问题(例如/sf/answers/3696600071/),但我仍然没有很好的解决方案。
我的应用程序有Groups,它们是动态创建/删除的,并且可以随时添加/删除成员(用户)。
每个Group 有 0..N 个私有文件(Firebase Storage),保存在不同的路径中(都带有前缀groups/{groupId}/...)。
在 Firestore 安全规则中,我使用get()&exists()来了解登录用户是否属于某个组。但我无法在 Firebase 存储安全规则中执行此操作。
2个建议的解决方案是:
但是令牌需要刷新(注销/登录,或更新过期的令牌),这对我的用例来说是不可接受的,因为用户一旦受到邀请就需要立即访问。此外,一个用户可以是许多组的一部分,这些组可能会增长超过 1000 字节。
但是组可以在不同的路径中有 N 个文件,因此我需要循环列出组的所有文件,并在每个文件的元数据中设置组成员的用户 ID,以允许对其进行访问。当添加/删除成员时,这将是由 Firestore(一个 Firebase 函数)触发的操作。
我不喜欢这种方法,因为:
create为 public(因为还没有要检查的元数据),然后需要触发一个函数来将 userIds 添加到元数据所以,我的问题是:
get和create所有文件在身份验证时(不允许delete和list),这是否足以保证安全?我认为恶意黑客可能有可能通过匿名用户上传任何内容,或者如果他们知道路径,则可能会读取所有私人组文件......谢谢!
firebase firebase-security firebase-storage google-cloud-firestore
我确信这些是常见的场景,但在研究了几个小时后,我无法真正找到常见的做法是什么。也许在 Firebase 方面有更多经验的人可以为我指明正确的方向。
我有两个特定的场景:
示例 1:向 firestore 中的所有用户添加新数据,这是新功能所需的
示例 2:开始将数据复制到现有文档中
我目前在云函数中编写代码,并在 firestore 事件(onUpdate“隐藏”文档的)上运行它,然后如果一切顺利,我会立即删除该函数。
我还增加了这个函数的超时和内存,因为这个想法是潜在地更新数百万个文档。
示例:在应用程序中授予用户管理员权限(设置自定义声明和 Firestore 数据的功能)。我们没有时间实施后台,因此从 firebase 门户网站/控制台执行此操作是理想的,指定用户 ID。
我当前的解决方案是使用https function,并从 GCP 门户运行它(在函数的“测试”选项卡上,能够传递 json)。但是该功能可以公开触发,我真的不喜欢......
这些场景的常见做法是什么?
firebase google-cloud-functions firebase-admin google-cloud-firestore
每次我停止/暂停音频引擎(使用AVAudioEnginesstop()或pause())时,状态栏上都会出现一个红色的麦克风图标一秒钟。
一段时间后,这开始很烦人,每次我暂停/停止引擎时,顶部都会出现红色。
在 iOS 13 中启用音频背景模式功能时会发生这种情况。
要重现这一点,请创建一个新的单视图项目,并将其添加到视图控制器:
private let engine = AVAudioEngine()
Run Code Online (Sandbox Code Playgroud)
而在viewDidAppear:
engine.connect(
engine.inputNode,
to: engine.mainMixerNode,
format: engine.inputNode.inputFormat(forBus: 0)
)
try? engine.start()
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.engine.pause() // or self.engine.stop()
}
Run Code Online (Sandbox Code Playgroud)
记住要启用音频背景模式,添加NSMicrophoneUsageDescription的Info.plist,并在iOS的13设备上运行。接受麦克风权限并重新运行应用程序。您将看到红色麦克风图标闪烁一次。
有没有办法摆脱这个?
我将应用程序转移到新的开发者帐户。当我从新的开发者帐户上传构建并通过 Testflight 部署它时,我遇到用户从应用程序注销的情况。
\n我认为这是由于钥匙串丢失造成的,因为Team ID发生了变化。因此,我联系了Apple,他们说无法访问新开发者帐户中的旧钥匙串,但我可以将应用程序转移回我的旧开发者帐户。
这对我们来说确实很糟糕,因为我们在设备中保存了用户创建的数据,这些数据在注销时会丢失。我们还有匿名用户,他们甚至无法重新获得对其帐户的访问权限,因为没有登录凭据。这对我们来说是不可接受的,因为我们会丢失用户数据,但我们还需要将应用程序转移到新的开发者帐户......因此我们正在尝试寻找可能的解决方案。
\n远非理想:例如,继续使用旧的开发者帐户一个月,并显示一条警告,内容如下:
\n\n\n请保存/备份您的所有数据并注册(如果您有匿名\n帐户),因为由于迁移,所有未保存的数据将在[今天日期 + 1\n个月]丢失。带来不便敬请谅解。
\n
一个月后,我们再次转账到新的开发者账户。当月没有看到该消息或没有保存数据的用户,再见数据\xe2\x80\xa6 可怕。
\n我不确定 Firebase Auth iOS SDK 是否具有执行以下操作的 API:
\n第二种解决方案有点不安全、复杂且难以测试,但从用户的角度来看,它比第一种解决方案更理想(如果一切顺利的话)。
\n所以,我的具体问题是:
\n我们目前仅使用匿名和电子邮件/密码身份验证方法。
\n谢谢!
\n