サービスアカウントでは、インストールされているすべてのアプリケーションにデータベースへのアクセスをハードコーディングしています。言い換えれば、あなたのアプリケーションをインストールするすべての人に同じことが表示されます。
通常、トークン方式を使用して、データベース上の異なるノードへのアクセスを異なるユーザーに合わせて調整します。これは通常、たとえば、あなたのノードのためのいくつかの簡単なルールを設定することによって達成される:
// 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",
}
}
}
}
あなたはofficial documentationにGoogle+のでのauth方法の詳細を確認することができます。ただし、一度一般的な用語でAUTH、あなたが得ることができます固有のユーザー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");
}
// ...
}
};
// ...
を、次の中Firebase接続を開始することができます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にも記載されています。