2016-09-20 89 views
0

我正在製作Android應用程序,它將從用戶那裏收集有用的信息。這裏是代碼如何爲Android應用程序設置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啓動線程,CPUs 6 09-21 00:36:04.413 31112-31465/com.example .amey.ilsalpha W/RepoOperation:setValue at/marks/-KS7zP1oKI0WmcikjO1G失敗:FirebaseError:Permission denied' – 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

相關問題