Javascript 如何强制用户仅将Firebase中特定文件的文件上载到特定节点。
我正在试用firebase存储,看看授权用户可以从web客户端上传文件,我想知道是什么通过调整javascript阻止用户更改路径 考虑以下几点 我想按如下方式组织用户文件Javascript 如何强制用户仅将Firebase中特定文件的文件上载到特定节点。,javascript,firebase,firebase-authentication,firebase-security,firebase-storage,Javascript,Firebase,Firebase Authentication,Firebase Security,Firebase Storage,我正在试用firebase存储,看看授权用户可以从web客户端上传文件,我想知道是什么通过调整javascript阻止用户更改路径 考虑以下几点 我想按如下方式组织用户文件 root : { users : uid1 : images {} : audio {} -users: uid2 : images {} : audio {} -users:
root : {
users :
uid1 : images {}
: audio {}
-users:
uid2 : images {}
: audio {}
-users:
: uid3 : images {}
: audio {}
}
然后将图像上载到/userid/images/
var storage = firebase.storage();
var storageRef = storage.ref();
var imagesRef = storageRef.child(uid_g).child('images').child(path);
问题:
是什么阻止用户将子项(“图像”)更改为子项(“音频”)
我只是想确保我设置的路径不会在存储上更改
服务器Im上的规则只允许用户读写数据
// Grants a user access to a node matching their user ID
service firebase.storage {
match /b/<your-firbase-storage-bucket>/o {
// Files look like: "user/<UID>/path/to/file.txt"
match /user/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
您可以继续使用安全规则创建进一步的路径限制:
service firebase.storage {
match /b/<your-firbase-storage-bucket>/o {
match /user/{userId} {
match /images {
// This will match only /user/{userId}/images
allow read, write: if imageCondition();
}
match /audio {
// If you don't want the user to change to audio, you can either say if false or just don't include this path
allow read, write: if audioCondition();
}
}
}
}
service firebase.storage{
匹配/b//o{
匹配/user/{userId}{
匹配/图像{
//这将只匹配/user/{userId}/images
允许读、写:如果imageCondition();
}
匹配/音频{
//如果您不希望用户更改为音频,您可以说If false或不包含此路径
允许读、写:如果audioCondition();
}
}
}
}
您可以继续使用安全规则创建进一步的路径限制:
service firebase.storage {
match /b/<your-firbase-storage-bucket>/o {
match /user/{userId} {
match /images {
// This will match only /user/{userId}/images
allow read, write: if imageCondition();
}
match /audio {
// If you don't want the user to change to audio, you can either say if false or just don't include this path
allow read, write: if audioCondition();
}
}
}
}
service firebase.storage{
匹配/b//o{
匹配/user/{userId}{
匹配/图像{
//这将只匹配/user/{userId}/images
允许读、写:如果imageCondition();
}
匹配/音频{
//如果您不希望用户更改为音频,您可以说If false或不包含此路径
允许读、写:如果audioCondition();
}
}
}
}
需要澄清的是,服务器上检查的是哪个用户ID?在javascript上有“firebase.auth().currentUser.u”和“firebase.auth().onAuthStateChanged(function(user)”两个选项,其中“user.uid”给出了另一个选项,但它们并不相同。除非您刚刚更改了身份验证状态(升级了匿名帐户、登录/注销等)。如果调用firebase.auth().currentUser.uid
在onAuthStateChanged
中,我希望与user.uid
匹配,是不是没有发生这种情况?不,它们是不同的,只是在不同的用户上尝试过。“firebase.auth().currentUser.u”和“firebase.auth().currentUser.uid”也不同。你的意思是firebase.auth().currentUser.u
或firebase.auth().currentUser.uid
(您键入的值是u
的两倍,所以我不确定)。只是为了澄清一下,服务器上检查的是哪个用户ID?在javascript上有“firebase.auth().currentUser.u”和“firebase.auth().onAuthStateChanged”(函数(用户)”其中有“user.uid”给出了另一个,但它们不相同。除非您刚刚更改了身份验证状态(升级了匿名帐户、登录/注销等),否则它们不应该不同。如果您调用firebase.auth().currentUser.uid
在onAuthStateChanged
中,我希望与user.uid
匹配,是不是没有发生这种情况?不,它们是不同的,只是在不同的用户上尝试过。“firebase.auth().currentUser.u”和“firebase.auth().currentUser.uid”也不同。你的意思是firebase.auth().currentUser.u
或firebase.auth().currentUser.uid
(您键入的值是u
的两倍,所以我不确定)。