我正在使用以下Firestore安全规则:
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
问题是,对于我的本机应用程序中的功能,将执行回调(以共享事务ID),并且该应用程序退出浏览器以处理该回调。在服务器上的回调脚本中,我有一些类似以下的代码:
fetch(url, {
method: 'GET',
headers: {
Accept: 'application/json',
}
}).then(response => {
if (response.ok) {
response.json().then(json => {
if(json.data == "Manual sale") {
alert("Manual sale complete! Return to Fairstarter!");
return;
}
var quant = 0;
var itemsRef = db.collection('items');
var query = itemsRef.where('barcode', '==', String(json.data)).get()
.then(snapshot => {
snapshot.forEach(doc => {
....
//UPDATE THAT IS LOCKED OUT BY PERMISSIONS
itemsRef.doc(doc.id).update({
[Object.keys(doc.data())[0]]]: {
quantity: newVal
}
})
问题是,在上面的代码块中,我尝试更新数据库,但是由于我不是来自具有用于身份验证的现有Firebase用户的事物,因此由于权限的原因,我被Firebase拒绝了。
如何在保持数据库安全的同时仍允许回调脚本更新数据库?
答案 0 :(得分:0)
使用firebase匿名登录功能,在配置firebase之后,将其放在脚本的顶部:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
//alert(user.uid);
// ...
} else {
// User is signed out.
// ...
}
// ...
});
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
alert(errorMessage);
});
请不要忘记在Firebase项目设置中启用匿名身份验证。