标签: google-cloud-firestore

Firestore 可以访问其他功能中的用户 ID

我正在使用 Firestore 数据库创建一个应用程序。我有一个问题,我想在其他功能中访问用户 ID,我该怎么做?

我使用 firebase.auth().onAuthStateChanged 函数来观察用户是否登录,我可以在此处访问用户 ID。

当我点击 btnName 时如何访问它?现在我必须遵循以下错误:

未捕获的 ReferenceError:uid 未定义

HTML

<html lang="en">
<head>
  <meta charset="utf-8">

  <title></title>

  <meta name="description" content="">
  <meta name="viewport" content="user-scalable=no, initial-scale=1.0, width=device-width, maximum-scale=1.0" />

  <script src="https://www.gstatic.com/firebasejs/4.9.0/firebase.js"></script>
  <script src="https://www.gstatic.com/firebasejs/4.9.0/firebase-firestore.js"></script>

</head>

<body>

    <h1>Welcome</h1>
    <button id="btnLogout" class="hide">Logout</button>
    <br><br>
    <input id="txtName" type="" placeholder="Name">
    <button id="btnName">Add name</button>

    <script src="js/app.js"></script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

js

// Initialize Firebase
var config = {
  apiKey: "AIzaSyBAQYQxSU0JkskvXKqBKzAHHWViutuP_lg",
  authDomain: "crypto-3171a.firebaseapp.com",
  databaseURL: "https://crypto-3171a.firebaseio.com",
  projectId: "crypto-3171a",
  storageBucket: "crypto-3171a.appspot.com",
  messagingSenderId: "86923986632"
};
firebase.initializeApp(config);

const db = firebase.firestore();

const …
Run Code Online (Sandbox Code Playgroud)

javascript firebase google-cloud-firestore

0
推荐指数
1
解决办法
9357
查看次数

将对象参数传递给 Promise.all

我根据时间范围对 Firestore 进行了三个查询。(24、12 和 6 小时)。我正在使用Promise.all并且它有效。从代码中可以看出,我通过使用返回快照的索引来访问每个查询的结果。我已经读过返回值将按照传递的 Promise 的顺序排列,而不管完成顺序如何。

现在,我希望能够将一个对象传递给 ,Promise.all因为我的查询数量对于我想要做的事情来说是不可预测的,基本上,我将循环到许多车辆并为每个车辆构建相同的 3 个查询,我会将其全部传递给Promise.all. 当Promise.all返回时,我希望能够知道该快照适用于哪个车辆和时间范围。

因此,我想将这个参数传递给Promise.all而不是数组。

{"vehicle1_24":query, "vehicle1_12":query, "vehicle1_6":query,
"vehicle2_24":query, "vehicle2_12":query, "vehicle2_6":query}
Run Code Online (Sandbox Code Playgroud)

代码

var queries = [
        vehicleRef.collection('telemetry').where('time_stamp', '<', today).where('time_stamp', '>', yesterday).get(),
        vehicleRef.collection('telemetry').where('time_stamp', '<', today).where('time_stamp', '>', twelveHours).get(),
        vehicleRef.collection('telemetry').where('time_stamp', '<', today).where('time_stamp', '>', sixHours).get()
      ]

      for (var i = 0; i < queries.length; i++) {
        queryResults.push(
          queries[i]
        )
      }

      Promise.all(queryResults)
        .then(snapShot=> {

          const yesterdayResult = result => getEnergy(result);
          const twelveHourResult = result => getEnergy(result); …
Run Code Online (Sandbox Code Playgroud)

node.js firebase google-cloud-firestore

0
推荐指数
1
解决办法
431
查看次数

admin.auth().currentUser; 在 Cloud Functions 中返回 undefined

我正在尝试创建一个函数,当设备在应用程序中注册时,会将这个设备 uid 附加到注册该设备的登录用户的 uid(这是在另一个 firestore 集合中,当用户寄存器)。

这是我的代码:

exports.addDeviceToUser = functions.firestore.document('device-names/{device}').onUpdate((change, context) => {
    const currentUser = admin.auth().currentUser;
    const deviceName = context.params.device;
    var usersRef = db.collection('users');
    var queryRef = usersRef.where('uid', '==', currentUser.uid);

    if (authVar.exists) {
        return queryRef.update({sensors: deviceName}).then((writeResult => {
        return console.log('Device attached');
        }));
    } else {return console.log('Device attachment failed, user not signed in');}
});
Run Code Online (Sandbox Code Playgroud)

我一直收到此错误:“类型错误:无法读取未定义的属性 'uid'。” 显然我无法访问当前用户的身份验证信息。为什么?

javascript firebase firebase-authentication google-cloud-functions google-cloud-firestore

0
推荐指数
1
解决办法
2100
查看次数

如何从查询的文档 Flutter/Firetore 中获取字段

我需要查询用户的信息,但到目前为止,我一直坚持如何从文档中的字段中获取值,以保留当前登录用户的信息:

String firstName = "";
String lastName = "";

void getInfo() async{
  var user = FirebaseAuth.instance.currentUser();
  var userQuery = Firestore.instance.collection('Users').where('e-mail', isEqualTo: '$user.email');

  // WHAT SHOULD I DO NEXT

}

@override
void initState(){
   super.initState();
   getInfo();
}

@override
Widget build(BuildContext context){
  return new Scaffold(
    body: new Container(
      child: new ListView(
        children: <Widget>[
          new ListTile(
            title: new Text(firstName)
          ),
          new ListTile(
            title: new Text(lastName)
          )
        ]
      )
    )
  );
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为“用户”的集合,当新用户注册时,它会创建一个文档来存储他的信息。该文档具有字符串类型的字段:'e-mail'、'firstName'、'lastName'。

dart firebase flutter google-cloud-firestore

0
推荐指数
1
解决办法
5026
查看次数

仅删除 Firestore REST API 上的一个字段

我正在尝试通过 Firebase Firestore REST API 中的 PATCH 方法删除文档的单个字段,但我找不到代表“删除此字段”的(或方法),就像在 Firebase 实时数据库中存在的undefined值一样。你知道如何实现吗?

firebase google-cloud-firestore

0
推荐指数
1
解决办法
576
查看次数

如何使用 swift 有条件地向 Firebase Firestore 中的查询添加另一个过滤器?

我正在使用 Google firebase firestore 进行一个项目。我想对我的用户搜索实施过滤器。想象一下,只搜索带有用户可以选择的复选框的活跃用户。

let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20)
//FILTER
if showOnlyActiveUsersBtn.isSelected {
    reference.whereField("active", isEqualTo: true)
}
reference.getDocuments(completion: {(querySnapshot, error) in
    .....
})
Run Code Online (Sandbox Code Playgroud)

我希望这只会返回具有字段“active: true”的用户的结果,但是,它返回与没有过滤器的查询相同的列表......如果我这样写:

let db = Firestore.firestore()
let reference = db.collection("users").limit(to: 20).whereField("active", isEqualTo: true)
reference.getDocuments(completion: {(querySnapshot, error) in
    .....
})
Run Code Online (Sandbox Code Playgroud)

它首先返回我预期的结果。我不知道为什么我的过滤器不起作用。如何以用户友好的方式添加逻辑“AND”条件?

firebase swift google-cloud-firestore

0
推荐指数
1
解决办法
763
查看次数

如何在 Flutter 中查询 Firebase Firestore 中 Geopoint 类型的字段?

我正在查询 firestore 集合以查找纬度和经度范围内的文档。由于看来您无法使用给定两个不同字段(“lat”、“lon”)的参数进行查询,因此我已将 Geopoint 类型分配给具有经度和纬度的单个字段“coords”。如何将 .where() 与地理点一起使用?下面是我想要使用的一般查询,其中 _latMin、_latMax 等是链接到地图边界框的变量。

_getDocs() async {
  print('getdocs');
  final QuerySnapshot snapshot = await FirebaseFirestore.instance
      .collection('collectionName')
      .where(
        'coords',
        isGreaterThan: _latMin,
        isLessThan: _latMax,
      )
      .where(
        'coords',
        isGreaterThan: _lonMin,
        isLessThan: _lonMax,
      )
      .get();
  snapshot.docs.forEach((DocumentSnapshot doc) {
    print(doc.data());
  });
}
Run Code Online (Sandbox Code Playgroud)

如何引用坐标内的纬度和经度?

在此输入图像描述

在此输入图像描述

firebase flutter google-cloud-firestore

0
推荐指数
1
解决办法
3790
查看次数

使用 Firebase v9 将 Firestore 集合转换为对象数组

我正在创建一个 React Web 应用程序。我想将包含文档的 firebase 集合转换为对象数组。数组中的每个对象对应于集合中的一个文档。这会让我的生活更轻松。我问的原因是我无法找到适用于 Firebase Version 9 的解决方案。

javascript firebase reactjs google-cloud-platform google-cloud-firestore

0
推荐指数
1
解决办法
728
查看次数

如何解决颤振上对空值使用空检查运算符的问题?

我尝试使用记录的用户 ID 从子集合中获取数据。然后显示这个错误 在此输入图像描述

我尝试从 firestore 子集合中获取它。集合名称是“users”,文档名称是 userid

代码

Future<void> getAmount() async {
    final id = "${loggedInUser.uid}";
    final reference = FirebaseFirestore.instance.doc('users/$id/recharge/$id');
    final snapshot = reference.get();

    final result = await snapshot.then(
        (snap) => snap.data() == null ? null : Amounts.fromJson(snap.data()!));
    print('result is ====> $result');
    setState(() {
      oneAmount = result;
      loading = false;
    });
  }
Run Code Online (Sandbox Code Playgroud)

文本小部件

Text(
            oneAmount!.amount,
            style: GoogleFonts.roboto(
              textStyle: TextStyle(
                fontSize: 20,
                fontWeight: FontWeight.bold,
                color: kWhite,
              ),
            ),
Run Code Online (Sandbox Code Playgroud)

模型

import 'dart:convert';

Amounts articlesFromJson(String str) => Amounts.fromJson(json.decode(str));

String articlesToJson(Amounts data) => json.encode(data.toJson()); …
Run Code Online (Sandbox Code Playgroud)

dart flutter google-cloud-firestore dart-null-safety

0
推荐指数
1
解决办法
527
查看次数

Firebase 安全规则。如何允许存储在文档内数组中的管理员访问?

我有一个 firebase firestore 文档,其中将管理员 ID 存储在管理员数组中。如果请求用户 ID 位于该管理员列表中,如何创建允许读取和写入的安全规则。

我想知道3个案例:

  1. 如果我有这条规则,我如何还允许管理员写入和读取:

    match /users/{uid}{
      allow read,write: if request.auth != null;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我可以在 securityrules 中创建一个函数,例如isAdmin() ,我可以在每个规则中使用它来接受管理员吗?

  3. 是否可以制定一个(或两个)规则来允许管理员读取和写入数据库中的所有内容,而不是为每个集合编写规则?

firebase firebase-security google-cloud-firestore

0
推荐指数
1
解决办法
48
查看次数