3 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
默認(rèn)情況下,新Firebase控制臺(tái)中項(xiàng)目中的數(shù)據(jù)庫只能由經(jīng)過身份驗(yàn)證的用戶讀取/寫入:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
請(qǐng)參閱快速入門以了解Firebase數(shù)據(jù)庫安全規(guī)則。
由于您未從代碼中簽入用戶,因此數(shù)據(jù)庫拒絕您訪問數(shù)據(jù)。要解決這個(gè)問題,您需要允許對(duì)數(shù)據(jù)庫進(jìn)行未經(jīng)身份驗(yàn)證的訪問,或者在訪問數(shù)據(jù)庫之前登錄用戶。
允許未經(jīng)身份驗(yàn)證的數(shù)據(jù)庫訪問權(quán)限
目前最簡(jiǎn)單的解決方法(直到教程更新)是進(jìn)入項(xiàng)目控制臺(tái)的Database面板,選擇Rules選項(xiàng)卡并用以下規(guī)則替換內(nèi)容:
{
"rules": {
".read": true,
".write": true
}
}
這使得您的新數(shù)據(jù)庫可由任何知道數(shù)據(jù)庫URL的人讀取和寫入。在投入生產(chǎn)之前,請(qǐng)務(wù)必再次保護(hù)您的數(shù)據(jù)庫,否則有人可能會(huì)開始濫用它。
在訪問數(shù)據(jù)庫之前登錄用戶
對(duì)于(稍微)更耗時(shí)但更安全的解決方案,請(qǐng)調(diào)用Firebase身份驗(yàn)證signIn...方法之一以確保用戶在訪問數(shù)據(jù)庫之前已登錄。最簡(jiǎn)單的方法是使用匿名身份驗(yàn)證:
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
然后在檢測(cè)到登錄時(shí)附加您的聽眾
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
我遇到了類似的問題,發(fā)現(xiàn)這個(gè)錯(cuò)誤是由于為實(shí)時(shí)數(shù)據(jù)庫設(shè)置了不正確的讀/寫操作規(guī)則。默認(rèn)情況下,google firebase現(xiàn)在加載云存儲(chǔ)而不是實(shí)時(shí)數(shù)據(jù)庫。我們需要切換到實(shí)時(shí)并應(yīng)用正確的規(guī)則。
我們可以看到它說云Firestore不是實(shí)時(shí)數(shù)據(jù)庫,一旦切換到正確的數(shù)據(jù)庫應(yīng)用以下規(guī)則:
{
"rules": {
".read": true,
".write": true
}
}
添加回答
舉報(bào)