繁体   English   中英

如何通过 REST ZDB974238714CA8DE6FZ34A7 将当前用户从 Angular 应用程序发送到 Firebase 实时数据库规则

[英]How to send current user from Angular app to Firebase realtime database rules through REST API

我有一个小型 Angular 应用程序部署到 Firebase。 只有2个用户。 用户使用他们的电子邮件地址进行身份验证。 我能够在我的 Angular 应用程序中获取用户数据。

在开发阶段,我使用了以下实时数据库规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

自然地,我想让整个数据库只对这 2 个用户可读和可写。

我尝试设置以下规则:

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

正如预期的那样,我收到 401 错误。

我的问题是,我应该如何从 Angular 应用程序端点请求中发送 uid?

我尝试通过路径参数发送它,例如:

this.http.get(`https://myappname.firebaseio.com/data.json?auth=${uid}`).toPromise(); 

但是像这样传递登录用户的 uid 是行不通的。 我应该用 http 接头发送它吗? 如果是,正确的语法应该是什么?

或者我需要寄什么东西吗? 也许我只需要一个更好的实时数据库规则?


编辑:

我能够使用身份验证服务的构造函数检索 tokenId。

this.firebaseAuth.authState.subscribe((user: any) => {
      if (user) {
        this.userData = user;
        localStorage.setItem('user', JSON.stringify(this.userData));
        JSON.parse(localStorage.getItem('user'));
        user.getIdToken().then((idToken: any) => {
          this.idToken = idToken;
        });
      } else {
        localStorage.setItem('user', null);
        JSON.parse(localStorage.getItem('user'));
      }
    });

现在,当我调用 API 端点时,我只需将 idToken 添加为路径参数,如下所示:

return this.http.get(`https://myapp.firebaseio.com/data.json?auth=${token}`).toPromise();

实时数据库规则如下所示:

{
  "rules": {
    ".read": "auth !== null",
    ".write": "auth !== null"
    }
}

您在 Angular 应用程序和 Firebase 实时数据库与实时数据库 REST ZDB974278714CA8ADE4F9Z 之间进行交互

文档中所述,要通过auth查询字符串参数向实时数据库 REST API 发送经过身份验证的请求,您需要生成并传递ID 令牌

this.http.get(`https://myappname.firebaseio.com/data.json?auth=<ID_TOKEN>`).toPromise();

要生成此 ID 令牌,您可以

  • 按照此处的说明从客户端(您的 Angular 应用程序)检索它;
  • 或者,使用Firebase Auth REST APIsignInWithPassword方法(因为您的用户是“通过他们的电子邮件地址进行身份验证的”。

请注意,ID 令牌与用户 uid 完全不同。


PS:由于您使用"auth.uid !== null"设置规则,您可能会对这个SO answer感兴趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM