使用服務帳戶,您對所有已安裝應用程序的數據庫進行硬編碼訪問,換句話說,安裝應用程序的每個人都會看到完全相同的內容。
您通常會使用令牌方式,因此您可以訪問數據庫上不同節點的不同用戶。這通常是通過設置一些簡單的規則,你的節點,例如實現:
// Sample firebase rules
{
"rules": {
"messages": {
// Only admin servers with service accounts should r/w here
".read": "auth.uid == 'server-with-svc-acct'",
".write": "auth.uid == 'server-with-svc-acct'",
"$user_id": {
// Users can only read their own nodes
".read": "auth.uid == $user_id",
".write": "auth.uid == $user_id",
}
}
}
}
您可以檢查有關如何使用Google+在official documentation權威性的細節,但總體而言,一旦你權威性,你可以得到一個唯一的用戶ID,並寫入您的實時數據庫中的所需節點。用戶將無法訪問任何其他節點,因爲規則將限制他:
@Override
protected void onCreate(Bundle savedInstanceState) {
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// ...
}
};
// ...
對於服務器,它是安全的,讓您的服務帳戶的祕密,你可以開始下面的一個火力地堡連接(注意databaseAuthVariableOverride
?,它匹配我們在messages
節點的根上使用的auth.uid
)。
firebase.initializeApp({
serviceAccount: "path/to/project-name-secrets.json",
databaseURL: "https://project-name.firebaseio.com",
databaseAuthVariableOverride: {
uid: "server-with-svc-acct"
}
});
關於這方面的更多信息也可以在documentation中找到。