我对编码比较新,遇到了麻烦。
我有这个代码将数据发送到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的规则,它似乎是一种我还没有学过的语言(或者它只是在我脑海中)。有人可以解释导致问题的原因吗?我以为是我要求它存储电子邮件和用户显示名称而你只是不允许这样做,但当我把它拿出来时我仍然有同样的问题。有没有办法在没有设定规则的情况下避免这个错误,或者是规则,我可以教自己如何写一天,或者我只是走出了我的联盟?
谢谢你的帮助!
默认情况下,new Firebase Console项目中的数据库只能由经过身份验证的用户读取/写入:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
见quickstart for the Firebase Database security rules。
由于您未从代码中签入用户,因此数据库拒绝您访问数据。要解决这个问题,您需要允许对数据库进行未经身份验证的访问,或者在访问数据库之前登录用户。
目前最简单的解决方法(直到教程更新)是进入项目控制台的Database面板,选择Rules选项卡并用以下规则替换内容:
{
"rules": {
".read": true,
".write": true
}
}
这使得您的新数据库可由任何知道数据库URL的人读取和写入。在您投入生产之前,请务必再次保护您的数据库,否则有人可能会开始滥用它。
对于(略微)更耗时但更安全的解决方案,请调用signIn...
的Firebase Authentication方法之一,以确保用户在访问数据库之前已登录。最简单的方法是using anonymous authentication:
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.
// ...
}
// ...
});
WORKING!!
Go to the "Database" option you mentioned.
1. There on the Blue Header you'll find a dropdown which says Cloud Firestore Beta
2. Change it to "Realtime database"
3. Go to Rules and set .write .read both to true
Let me know how it goes.
copied from
https://github.com/firebase/quickstart-js/issues/239
转到数据库,标题旁边有2个选项:
Cloud Firestore,实时数据库
选择实时数据库并转到规则
将规则更改为true。
这解决了我的问题。
有用..!!
另一种解决方案是,如果您已经拥有凭证,则实际创建或登录用户。以下是我使用Plain JS的方法。
function loginToFirebase(callback)
{
let email = 'xx@xx.com';
let password = 'xxxxxxxxxxxxxx';
let config =
{
apiKey: "xxx",
authDomain: "xxxxx.firebaseapp.com",
projectId: "xxx-xxx",
databaseURL: "https://xxx-xxx.firebaseio.com",
storageBucket: "gs://xx-xx.appspot.com",
};
if (!firebase.apps.length)
{
firebase.initializeApp(config);
}
let database = firebase.database();
let storage = firebase.storage();
loginFirebaseUser(email, password, callback);
}
function loginFirebaseUser(email, password, callback)
{
console.log('Logging in Firebase User');
firebase.auth().signInWithEmailAndPassword(email, password)
.then(function ()
{
if (callback)
{
callback();
}
})
.catch(function(login_error)
{
let loginErrorCode = login_error.code;
let loginErrorMessage = login_error.message;
console.log(loginErrorCode);
console.log(loginErrorMessage);
if (loginErrorCode === 'auth/user-not-found')
{
createFirebaseUser(email, password, callback)
}
});
}
function createFirebaseUser(email, password, callback)
{
console.log('Creating Firebase User');
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function ()
{
if (callback)
{
callback();
}
})
.catch(function(create_error)
{
let createErrorCode = create_error.code;
let createErrorMessage = create_error.message;
console.log(createErrorCode);
console.log(createErrorMessage);
});
}