如何以这样的方式向用户提供对云服务的访问,使其间接成为我的应用程序的一部分但未在我的firebase控制台中注册?

问题描述 投票:0回答:1

基本上我正在设计一个角度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));
  });
}

我想要的是为用户提供基于databaseURLprojectId的访问权限,这些访问者不在我的firebase控制台中的用户列表中,但已经通过浏览器中的电子邮件登录。我知道这可能听起来有点奇怪,尽管我可以通过这些方法进行身份验证,但限制是控制台中的用户数量最多可达500.所以最重要的是我可以获得并使用该会话令牌和将它发送到firebase以获取数据?

我已经尝试以不同的方式定义规则,但它们似乎都没有工作。我还继续看看我是否只能提供对我的域用户的访问,但显然这不是它的工作方式,因为垃圾邮件用户可以发送相同的参数,因此主要目的被破坏。如果您对问题有任何更清晰的要求,请询问。谢谢你的帮助和时间。和平。

angular firebase firebase-authentication google-cloud-firestore firebase-security-rules
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.