我正在使用 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) 我根据时间范围对 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) 我正在尝试创建一个函数,当设备在应用程序中注册时,会将这个设备 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
我需要查询用户的信息,但到目前为止,我一直坚持如何从文档中的字段中获取值,以保留当前登录用户的信息:
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'。
我正在尝试通过 Firebase Firestore REST API 中的 PATCH 方法删除文档的单个字段,但我找不到代表“删除此字段”的值(或方法),就像在 Firebase 实时数据库中存在的undefined值一样。你知道如何实现吗?
我正在使用 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”条件?
我正在查询 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)
如何引用坐标内的纬度和经度?
我正在创建一个 React Web 应用程序。我想将包含文档的 firebase 集合转换为对象数组。数组中的每个对象对应于集合中的一个文档。这会让我的生活更轻松。我问的原因是我无法找到适用于 Firebase Version 9 的解决方案。
javascript firebase reactjs google-cloud-platform google-cloud-firestore
我尝试使用记录的用户 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) 我有一个 firebase firestore 文档,其中将管理员 ID 存储在管理员数组中。如果请求用户 ID 位于该管理员列表中,如何创建允许读取和写入的安全规则。
我想知道3个案例:
如果我有这条规则,我如何还允许管理员写入和读取:
match /users/{uid}{
allow read,write: if request.auth != null;
}
Run Code Online (Sandbox Code Playgroud)
我可以在 securityrules 中创建一个函数,例如isAdmin() ,我可以在每个规则中使用它来接受管理员吗?
是否可以制定一个(或两个)规则来允许管理员读取和写入数据库中的所有内容,而不是为每个集合编写规则?