默认情况下,Firebase控制台中项目中的数据库仅可由管理用户读取/写入(例如,在CloudFunctions或使用Admin SDK的进程中)。常规客户端SDK的用户无法访问数据库,除非您更改服务器端安全规则。
您可以更改规则,以便只有经过身份验证的用户才能读取/写入数据库:
{ "rules": { ".read": "auth != null", ".write": "auth != null" }}但是由于您不是从代码中登录用户,因此数据库拒绝您访问数据。要解决此问题,您将需要允许未经授权的数据库访问,或者在访问数据库之前登录用户。
允许未经身份验证的数据库访问
目前(直到本教程更新)最简单的解决方法是进入项目控制台的“数据库”面板,选择“规则”选项卡,然后用以下规则替换内容:
{ "rules": { ".read": true, ".write": true }}这使得您知道数据库URL的任何人都可以读取和写入新数据库。在投入生产之前,请确保再次保护数据库,否则可能会有人滥用数据库。
访问数据库之前登录用户
对于(稍微)更耗时但更安全的解决方案,请调用Firebase身份验证
signIn...方法之一以确保用户在访问数据库之前已登录。最简单的方法是使用匿名身份验证
firebase.auth().signInAnonymously().catch(function(error) { // Handle Errors here. var errorCode = error.pre; var errorMessage = error.message; // ...});然后在检测到登录后附加您的听众
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. // ... } // ...});


