[英]How do you query and display the authenticated user's order from the Firebase Realtime Database using AngularFire in an Angular app?
[英]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 令牌,您可以
signInWithPassword
方法(因为您的用户是“通过他们的电子邮件地址进行身份验证的”。请注意,ID 令牌与用户 uid 完全不同。
PS:由于您使用"auth.uid !== null"
设置规则,您可能会对这个SO answer感兴趣。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.