基本上我正在设计一个角度7应用程序,每个用户可以读取和写入firestore内部的内容,为此我已经在AngularFire2中引用了他们的官方文档。因此,我需要以这样一种方式获取数据:每当用户输入我的应用程序时,他/她应该已经过身份验证,然后才能访问云端防火墙数据。我能用这种方式做到这一点:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
目前我正在使用signInWithEmailAndPassword()
和GoogleAuthProvider()
进行身份验证。
doGoogleLogin() {
return new Promise<any>((resolve, reject) => {
const provider = new firebase.auth.GoogleAuthProvider();
provider.addScope('profile');
provider.addScope('email');
this.afAuth.auth
.signInWithPopup(provider)
.then(res => {
resolve(res);
}, err => {
console.log(err);
reject(err);
});
});
}
doLogin(value) {
return new Promise<any>((resolve, reject) => {
firebase.auth().signInWithEmailAndPassword(value.email, value.password)
.then(res => {
resolve(res);
console.log(this.afAuth);
}, err => reject(err));
});
}
我想要的是为用户提供基于databaseURL
和projectId
的访问权限,这些访问者不在我的firebase控制台中的用户列表中,但已经通过浏览器中的电子邮件登录。我知道这可能听起来有点奇怪,尽管我可以通过这些方法进行身份验证,但限制是控制台中的用户数量最多可达500.所以最重要的是我可以获得并使用该会话令牌和将它发送到firebase以获取数据?
我已经尝试以不同的方式定义规则,但它们似乎都没有工作。我还继续看看我是否只能提供对我的域用户的访问,但显然这不是它的工作方式,因为垃圾邮件用户可以发送相同的参数,因此主要目的被破坏。如果您对问题有任何更清晰的要求,请询问。谢谢你的帮助和时间。和平。
使用Firebase安全规则,无法将每个用户的数据控制应用于未使用Firebase身份验证登录的用户。如果Auth没有验证他们的身份,那么安全规则根本没有可用的机制来确定谁可以做什么。浏览器cookie不可用。任何未登录的用户在尝试从移动客户端访问文档时,都会有效地使request.auth
等于null。