Javascript Firebase权限被拒绝
我对编码比较陌生,有点麻烦 我有这个代码可以将数据发送到firebaseJavascript Firebase权限被拒绝,javascript,firebase,firebase-realtime-database,firebase-security,Javascript,Firebase,Firebase Realtime Database,Firebase Security,我对编码比较陌生,有点麻烦 我有这个代码可以将数据发送到firebase app.userid=app.user.uid var userRef=app.dataInfo.child(app.users); var useridRef=userRef.child(app.userid); useridRef.set({ 地点:“, 主题:“, 配色方案:“, 食物:“ }); 然而,我不断得到错误: FIREBASE警告:设置为/users/(GoogleID)失败:权限被拒绝 2016-05
app.userid=app.user.uid
var userRef=app.dataInfo.child(app.users);
var useridRef=userRef.child(app.userid);
useridRef.set({
地点:“,
主题:“,
配色方案:“,
食物:“
});
然而,我不断得到错误:
FIREBASE警告:设置为/users/(GoogleID)失败:权限被拒绝
2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺中)错误:权限被拒绝:权限被拒绝(…)
当我试着去查这篇文章时,它谈到了Firebase的规则,这似乎是一种我还没有学会的语言(或者它只是在我的脑海中闪过)。有人能解释是什么导致了这个问题吗?我以为是我要求它存储电子邮件和用户显示名称,而你只是不允许这样做,但当我把它们拿出来时,我仍然有同样的问题。有没有一种方法可以避免这种错误而不设置规则,或者规则是我可以在一天内教会自己如何写作的东西,或者我只是不适合自己
谢谢你的帮助 默认情况下,中的项目中的数据库只能由管理用户可读/写(例如,在云函数中,或使用Admin SDK的进程中)。常规客户端SDK的用户无法访问数据库,除非您更改服务器端安全规则
您可以更改规则,以便只有经过身份验证的用户才能读取/写入数据库:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
看
但是,由于您没有从代码中登录用户,因此数据库拒绝您访问数据。要解决此问题,您需要允许未经验证的访问数据库,或者在访问数据库之前登录用户
允许对数据库进行未经身份验证的访问
目前最简单的解决方法(直到教程更新)是进入项目控制台中的“数据库”面板,选择“规则”选项卡,并用以下规则替换内容:
{
"rules": {
".read": true,
".write": true
}
}
这使得任何知道数据库URL的人都可以读写新数据库在投入生产之前,请确保再次保护您的数据库,否则可能会有人开始滥用它。
在访问数据库之前登录用户
要获得(稍微)更耗时但更安全的解决方案,请调用的signIn…
方法之一,以确保用户在访问数据库之前已登录。最简单的方法是:
然后在检测到登录时附加侦听器
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.
// ...
}
// ...
});
默认情况下,中的项目中的数据库仅可由管理用户读取/写入(例如,在云函数中或使用Admin SDK的进程中)。常规客户端SDK的用户无法访问数据库,除非您更改服务器端安全规则
您可以更改规则,以便只有经过身份验证的用户才能读取/写入数据库:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
看
但是,由于您没有从代码中登录用户,因此数据库拒绝您访问数据。要解决此问题,您需要允许未经验证的访问数据库,或者在访问数据库之前登录用户
允许对数据库进行未经身份验证的访问
目前最简单的解决方法(直到教程更新)是进入项目控制台中的“数据库”面板,选择“规则”选项卡,并用以下规则替换内容:
{
"rules": {
".read": true,
".write": true
}
}
这使得任何知道数据库URL的人都可以读写新数据库在投入生产之前,请确保再次保护您的数据库,否则可能会有人开始滥用它。
在访问数据库之前登录用户
要获得(稍微)更耗时但更安全的解决方案,请调用的signIn…
方法之一,以确保用户在访问数据库之前已登录。最简单的方法是:
然后在检测到登录时附加侦听器
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.
// ...
}
// ...
});
复制自。我遇到了类似的问题,并发现此错误是由于为实时数据库的读/写操作设置了不正确的规则所致。默认情况下,google firebase现在加载的是云存储而不是实时数据库。我们需要切换到实时并应用正确的规则 正如我们看到的,云Firestore不是实时数据库,一旦切换到正确的数据库,请应用以下规则:
{
"rules": {
".read": true,
".write": true
}
}
我遇到了类似的问题,并发现此错误是由于为实时数据库的读/写操作设置了不正确的规则所致。默认情况下,google firebase现在加载的是云存储而不是实时数据库。我们需要切换到实时并应用正确的规则 正如我们看到的,云Firestore不是实时数据库,一旦切换到正确的数据库,请应用以下规则:
{
"rules": {
".read": true,
".write": true
}
}
转到数据库,标题旁边有两个选项: 云Firestore,实时数据库 选择实时数据库并转到规则
将规则更改为true。转到数据库,标题旁边
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}