Firebase权限被拒绝

我对编码比较陌生,遇到了麻烦。

我有这段代码可以将数据发送到Firebase

app.userid = app.user.uid

var userRef = app.dataInfo.child(app.users);

var useridRef = userRef.child(app.userid);

useridRef.set({

locations: "",

theme: "",

colorScheme: "",

food: ""

});

但是,我不断收到错误:

FIREBASE警告:设置为/ users /(GoogleID)失败:Permission_denied 2016-05-23

22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…)

当我尝试查找时,它谈论的是Firebase的规则,该规则似乎是一种我还没有学过的语言(或者说是我的头上的话)。有人可以解释造成此问题的原因吗?我以为是我要它来存储电子邮件和用户显示名称,但您根本不被允许这样做,但是当我取出这些名称时,我仍然遇到同样的问题。是否可以在不设置规则的情况下避免这种错误,还是可以通过规则教我自己如何在一天之内完成写作,还是只是脱离了联盟?

谢谢你的帮助!

回答:

默认情况下,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.code;

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.

// ...

}

// ...

});

以上是 Firebase权限被拒绝 的全部内容, 来源链接: utcz.com/qa/411107.html

回到顶部