2016-09-20 3 views
0

사용자로부터 유용한 정보를 수집하는 Android 앱을 만들고 있습니다. 코드는 다음과 같습니다Android App 용 Firebase 데이터베이스 보안 규칙을 설정하는 방법

Firebase postRef = mRef.child("marks"); 
Map<String, String> marks = new HashMap<String, String>(); 
marks.put("Name", fname); 
marks.put("Phone", fphone); 
marks.put("Year", fyear); 
marks.put("Email", femail); 
String uid=postRef.getKey(); 
Toast.makeText(im.this,"Thanks!",Toast.LENGTH_LONG).show(); 

이렇게하면 내 Android 앱의 모든 사용자로부터 데이터가 전송됩니다. 인증 된 사용자 만 자신의 정보에 액세스 할 수있는 특정 규칙을 어떻게 설정해야합니까? 다른 사용자 정보가 아닙니다.

나는 중포 기지 규칙이 시도 :

{ 
    "rules":{ 
    "$uid":{ 
    ".read":"auth.uid==$uid", 
    ".write":"auth.uid==$uid", 
    ".validate":"newData.hasChildren(['uid','Email','Name'])" 
    } 
    } 

} 

그러나 그것이 작동하지 않습니다. 친절하게 구체적인 해결책을 말해주십시오.

+0

사용자가 자신의 데이터에만 액세스 할 수 있도록 규칙이 잘 보입니다. 공유 한 코드는 데이터베이스에서 읽거나 데이터베이스에 쓰지 않으므로 오류가 발생하지 않습니다. 뭐가 문제 야? –

+0

감사합니다. 실제 데이터베이스에는 UID가 없습니다. 다음은 logcat입니다. '09 -21 00 : 36 : 03.971 31112-31223/com.example.amey.ilsalpha V/RenderScript : 0x559eaba9c0 실행중인 스레드 (CPU) 6 09-21 00 : 36 : 04.413 31112-31465/com.example .amey.ilsalpha W/RepoOperation : setValue at/marks/-KS7zP1oKI0WmcikjO1G 실패 : FirebaseError : 권한이 거부되었습니다. ' – coolamz

답변

1

질문과 코멘트를 올바르게 읽으면 데이터를 "마크"노드 아래에 놓습니다. 즉, 보안 규칙에 다음과 같이 포함시켜야 함을 의미합니다.

{ 
"rules":{ 
    "marks":{ 
    "$uid":{ 
     ".read":"auth.uid==$uid", 
     ".write":"auth.uid==$uid", 
     ".validate":"newData.hasChildren(['uid','Email','Name'])" 
     } 
    } 
    } 
} 
+0

감사합니다. Andre! 하지만 여전히 작동하지 않습니다! 그것은 읽는 데 많은 도움이되었지만. 그러나 쓰기를위한 솔루션이 필요합니다. – coolamz

+0

@coolamz 질문에 쓰는 데 사용하는 코드를 추가해야합니다. –

+0

사과! 그 첫 번째 질문! { "규칙": { "표시": { "$의 UID"다음은 현재 코드는 { ".read": "auth.uid == $의 UID", "에 .write"사실 , ".validate": "newData.hasChildren ([ 'Email', 'Name'])" } } } } – coolamz

관련 문제