서비스 계정을 사용하면 데이터베이스에 설치된 모든 응용 프로그램에 액세스 할 수 있습니다. 즉, 응용 프로그램을 설치하는 모든 사람에게 똑같은 내용이 표시됩니다.
데이터베이스의 다른 노드에 대한 액세스를 다른 사용자에게 맞게 조정할 수 있도록 일반적으로 토큰 방식을 사용합니다. 이것은 일반적으로 예를 들어, 노드에 대한 몇 가지 간단한 규칙을 설정하여 달성된다
// 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+를 정식하는 방법에 대한 자세한 내용을 확인할 수 있지만, 일반적인 용어로하면 일단 인증, 당신은 얻을 수 있습니다 고유 한 사용자 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에서도 확인할 수 있습니다.