我们的应用程序使用Firebase作为后端数据库。 Firebase使用Google作为唯一的提供程序为我们的应用程序提供身份验证。身份验证工作正常。身份验证结果中显示“成功”。我想更改我的Firebase规则,以便只有集合中存在的用户才能访问数据。为此,我在firebase中有规则来控制对数据的访问。当我使用request.auth中的任何变量时,这些规则不起作用(与模拟器中的变量相同)
以下规则适用于应用程序和模拟器:
match /restaurants/{$rId}/addresses/{document=**} {
allow read, write : if get(/databases/$(database)/documents/users/abc@gmail.com).data.restaurantId == $rId;
}
以下规则不适用于应用程序,但可以在模拟器中使用
match /restaurants/{$rId}/addresses/{document=**} {
allow read, write : if get(/databases/$(database)/documents/users/$(request.auth.token.email)).data.restaurantId == $rId;
}
我正在从应用程序发送身份验证请求,如下所示:
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
处理以下身份验证结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
Toast.makeText(MyApplication.getAppContext(), "Login Successfull", Toast.LENGTH_LONG);
}
}
}
我的firebase数据库包含以下结构
用户:
/users
abc@gmail.com
-restaurantId: "1"
餐馆:
/restaurants
1
addresses
local
-name: a
international
-name: b
2
addresses
local
-name: c
international
-name: d
3
addresses
local
-name: e
international
-name: f
当用户尝试使用有效密码登录时,我能够看到Toast“登录成功”。
我应该将身份验证结果保存在onActivityResult中,以便进一步的请求中包含request.auth.token.email吗? Kinldy请指导我。 有人可以让我知道我做错了什么吗?