flu*_*oid 2 google-cloud-storage firebase firebase-security firebase-authentication firebase-admin
我正在尝试防止存储滥用。我的目标是每天限制用户上传操作。所以我部署了一个存储 onFinalize 触发器,一旦文件上传,该功能就会检测到一个计数器,该计数器使用 Firestore 是否达到了限制。如果是,像这样将毫秒存储到 CustomUserClaims:
//the user need to wait after this time to continue upload files (timeToUnlock = currentTime + additionalTime)
setCustomUserClaims(uid, {
timeToUnlock: 1570509112055
})
Run Code Online (Sandbox Code Playgroud)
并比较规则
allow create: if request.time.toMillis() >= request.auth.token.timeToUnlock;
Run Code Online (Sandbox Code Playgroud)
但是每次当 setCustomUserClaims 我需要注销并再次登录客户端以更新声明或声明不会更新它只是保留以前的值。我打印 customClaims 到控制台参数已更新但似乎规则中的参数未更新。任何人都有更好的主意解决这个问题?因为如果这不起作用,我不知道要防止这种情况发生,谢谢您的帮助。
console.log((await admin.auth().getUser(uid)).customClaims);
Run Code Online (Sandbox Code Playgroud)
你看到的是预期的行为。更新声明的后端代码无法强制客户端立即查看这些声明。根据文档:
通过 Admin SDK 修改用户的新声明后,它们会通过以下方式通过 ID 令牌传播到客户端的经过身份验证的用户:
- 用户在修改自定义声明后登录或重新进行身份验证。作为结果发布的 ID 令牌将包含最新的声明。
- 在旧令牌过期后,现有用户会话会刷新其 ID 令牌。
- 通过调用 currentUser.getIdToken(true) 强制刷新 ID 令牌。
您能做的最好的事情是编写您的客户端,以便服务器上的更改触发客户端上的更改以强制刷新将使用新声明的 ID 令牌。但这并不一定会阻止客户端使用旧令牌,直到它最终过期。
如果您想限制上传,在每次存储上传时使用 Cloud Functions 触发器会更安全可靠,检查文件是否应该被允许,如果文件违反您的规则,则删除该文件。
归档时间: |
|
查看次数: |
1683 次 |
最近记录: |