我正在firestore admin文档上强制执行此安全规则,以便我可以检查用户是否是实际的admin:
match /admin/identity {
allow write : if false;
allow read : if request.auth.token.name == resource.data.name;
}
如果用户声称自己是管理员,则在通过电话或匿名使他失效之后,我将使用给定名称更新FirebaseUser配置文件,以便该对象包含用作恢复代码的显示名称:
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("ABCDEFJHIJK")
.build();
mUser.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
//try get document, if success the user is the actual admin, if we get error code ACCESS_DENIED then the code is incorrect, else then another error occured retry.
}
}
});
尝试时,request.auth.token.name似乎不包含任何实际的字符串数据,然后该规则拒绝所有请求的get()请求。 Firestore控制台“安全性”选项卡中的模拟器似乎也忽略了出现在电话和匿名身份验证中的请求有效负载中的名称,据我所知,文档中没有任何内容,只是清楚地指出仅考虑了某些身份验证数据字段对于某些身份验证提供程序,但对于其他身份验证提供程序则没有。
这是Firebase中的预期行为,还是我缺少某些东西?我必须采取哪些替代措施来完成恢复政策?