0

基本上,我正在设计一个Angular 7应用程序,每个用户都可以在其中读取和写入 firestore 中的内容,为此我在AngularFire2中引用了他们的官方文档。因此,我需要以这样一种方式获取数据,即每当用户进入我的应用程序时,他/她都应该已经过身份验证,然后才能访问云 Firestore 数据。我可以这样做:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

目前我正在使用signInWithEmailAndPassword()and进行身份验证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));
  });
}

我想要的是授予用户访问权限databaseURLprojectId这些用户未包含在我的 firebase 控制台中的用户列表中,但已经通过浏览器中的电子邮件登录。尽管我可以通过这些方法进行身份验证,但我知道这听起来可能有点奇怪,但限制是控制台中的用户数量最多为 500。所以主要的是我可以获取并使用该会话令牌并将其发送到 Firebase 以获取数据吗?

我已经尝试以不同的方式定义规则,但它们似乎都不起作用。我还继续查看是否可以仅向我的域的用户提供访问权限,但显然这不是它的工作方式,因为垃圾邮件用户可以发送相同的参数,因此主要目的被破坏了。如果您需要更清楚的问题,请询问。感谢您的帮助和时间。和平。

4

1 回答 1

0

使用 Firebase 安全规则,无法将每个用户的数据控制应用于未使用 Firebase 身份验证登录的用户。如果身份未通过 Auth 验证,安全规则根本没有可用的机制来确定谁可以做什么。浏览器 cookie 不可用。任何未登录的人在request.auth尝试从移动客户端访问文档时都会有效地导致等于 null。

于 2019-04-01T06:14:23.987 回答