Javascript Firestore安全规则可以';t检索request.auth.token.name
Firebase安全规则无法识别request.auth.token.name 我想使用用户的显示名应用安全规则。 我使用了一个新的和更新的配置文件 这是我的客户代码Javascript Firestore安全规则可以';t检索request.auth.token.name,javascript,firebase,google-cloud-firestore,firebase-authentication,firebase-security,Javascript,Firebase,Google Cloud Firestore,Firebase Authentication,Firebase Security,Firebase安全规则无法识别request.auth.token.name 我想使用用户的显示名应用安全规则。 我使用了一个新的和更新的配置文件 这是我的客户代码 var firebase = require('firebase/app') require('firebase/auth') require('firebase/firestore') firebase.initializeApp(~~~) firebase.auth().signInAnonymously().then(({
var firebase = require('firebase/app')
require('firebase/auth')
require('firebase/firestore')
firebase.initializeApp(~~~)
firebase.auth().signInAnonymously().then(({user}) => {
user.updateProfile({
displayName: 'ABC',
}).then(() => {
// {..., uid: '~~~', displayName: 'ABC', photoURL: null}
console.log(user.toJSON())
var db = firebase.firestore()
db.collection('HelloCollection').doc('WorldDoc').get()
.then((doc) => { console.log('Success') })
.then((err) => { console.log('Failed', err) })
})
})
这是我的Firestore安全规则
service cloud.firestore {
match /databases/{database}/documents {
match /HelloCollection/{docId} {
// allow read, create, update: if true; // This evaluated true.
// This evaluated false.
allow read, create, update: if request.auth.token.name == "ABC";
}
}
}
我期待“成功”,
但实际产出是有限的
Failed FirebaseError: Missing or insufficient permissions.
at new FirestoreError (webpack-internal:///3120:352:28)
at JsonProtoSerializer.fromRpcStatus (webpack-internal:///3120:14802:16)
at JsonProtoSerializer.fromWatchChange (webpack-internal:///3120:15293:44)
at PersistentListenStream.onMessage (webpack-internal:///3120:11280:43)
at eval (webpack-internal:///3120:11209:30)
at eval (webpack-internal:///3120:11249:28)
at eval (webpack-internal:///3120:1630:20)
at run (webpack-internal:///1421:66:22)
at eval (webpack-internal:///1421:79:30)
at MutationObserver.flush (webpack-internal:///358:18:9)
我无法直接解决这个问题,但我绕过了这个问题,让它通过UserID而不是用户名进行身份验证,如下所示:
request.resource.data.uid == request.auth.token.sub
请注意,您的HelloCollection查询也应该更改,以便用文本存储用户id。下面是一个工作示例
match /stuff/{candy} {
allow read, write: if request.auth.token.name == candy
}
@弗雷伯恩是对的。您可以通过“request.auth.token.name”访问用户的显示名称。。如果你不能让它工作。。mb您的代码有其他错误不应
request.auth.token.name
berequest.auth.token.displayName
?@Dadboz request.auth.token.name是检索请求者显示名称的正确方法,因为displayName是您在标记中设置的自定义字段,您无法通过name访问它。那么试试上面@Dadboz提到的解决方案。你解决了这个问题吗,我也被困在里面了?有人解决了这个问题吗?我也被卡住了。。。