使用 firebase auth 和 firestore 在流中调用未来
Posted
技术标签:
【中文标题】使用 firebase auth 和 firestore 在流中调用未来【英文标题】:Calling a future in a stream with firebase auth and firestore 【发布时间】:2021-02-22 18:56:37 【问题描述】:我试图让 StreamProvider 在应用程序的其余部分提供一个“kaizenUser”对象。为了获得这个“KaizenUser”,我已经从 firebase 身份验证中删除了用户。然后使用 firebase auth 用户的 uid,我用它来访问我自己的用户文档表单 firebase.firestore 以使用我的 firestore 用户添加的“角色”信息创建 KaizenUser。
花了几天时间与身份验证服务中的代码搏斗,我想我已经很接近了......
从 StreamProvider 开始:
Widget build(BuildContext context)
return StreamProvider<KaizenUser>.value(
value: AuthService().user,
child: MaterialApp(
debugShowCheckedModeBanner: false,
home: Wrapper(),
),
);
身份验证服务类。 获取用户流调用 userFromFirebaseUser,我在其中调用 getRole 来查找 firestore 中等效用户的文档引用和“角色”字段。 然后返回 userFromFirebaseUser,使用该角色字段创建一个完整的 KaizenUser,它将通过流传递。
class AuthService
final FirebaseAuth _auth = FirebaseAuth.instance;
// auth change user stream
Stream<KaizenUser> get user async*
yield* _auth
.authStateChanges()
.map((User user) => _userFromFirebaseUser(user));
//Create KaizenUser object based on firebase user
KaizenUser _userFromFirebaseUser(User user)
String role = getRole(user.uid) as String;
KaizenUser kaizenUser =
KaizenUser(uid: user.uid, email: user.email, role: role);
return kaizenUser;
// ignore: missing_return
Future<String> getRole(String uid) async
var doc =
await FirebaseFirestore.instance.collection('users').doc(uid).get();
return doc.data()['role'];
错误是: Future 类型在类型转换中不是 String 类型。
在写这篇文章的同时,我认为代码的问题行'as String'
String role = getRole(user.uid) as String;
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:错误是因为您没有等待返回的未来结果。尝试以下方法:
String role = await getRole(user.uid):
【讨论】:
正确,我正在使用智能手机,当我回答您的问题时无法完全看到您的代码,否则我会建议您进行更改。它解决了你的问题吗? 这种变化让我走上了一条变化之路,最后我更加困惑:我试过了,然后不得不将异步添加到 _userFromFirebaseUser 函数并将返回更改为 Future以上是关于使用 firebase auth 和 firestore 在流中调用未来的主要内容,如果未能解决你的问题,请参考以下文章
使用自己的身份验证服务器的firebase-auth模块和firebase-common-auth的重复
使用自己的身份验证服务器复制 firebase-auth 模块和 firebase-common-auth
使用 auth0 Firebase 和 Ionic 进行 Linkedin 身份验证
request.auth != null 和 request.auth == null 不提供访问权限,其中 true 提供 - firebase 存储