全局访问 Google 登录用户名
Posted
技术标签:
【中文标题】全局访问 Google 登录用户名【英文标题】:Access Google Sign-In username globally 【发布时间】:2018-10-06 07:11:20 【问题描述】:我在 Flutter 中遇到 Firebase 身份验证问题,更具体地说是 user.displayName
查询。我在我的应用程序的第一个屏幕上使用强制性的 Google 登录,因此我可以保证在所有后续屏幕上,用户都有一个与他关联的名称和 userId。
然而,每次我想访问用户名时,我现在所做的基本上就是再次验证用户身份:
GoogleSignInAccount googleUser = await googleSignIn.signInSilently();
GoogleSignInAuthentication googleAuth = await googleUser.authentication;
FirebaseUser user = await auth.signInWithGoogle(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
futureId = user.uid;
print("signed in " + user.displayName);
return user.displayName;
这显然会占用不必要的时间和带宽。
由于用户之前已经登录过一次,还有其他方法吗?我是否可以访问 Firebase Auth 存储的用户数据以用于其他 Firebase 产品(如 Firestore)?
【问题讨论】:
【参考方案1】:FirebaseAuth 有一个名为 currentUser
的 async
方法,可用于访问当前经过身份验证的用户。
虚拟示例:
class SomePage extends StatefulWidget
@override
_SomePageState createState() => new _SomePageState();
class _SomePageState extends State<SomePage>
String _userName = "...";
_getUserAuth()
FirebaseAuth.instance.currentUser().then((user)
setState(()this._userName= user.displayName;);
);
print(this._userName);
@override
Widget build(BuildContext context)
return new Center(
child: new FlatButton(
child: new Text(this._userName),
onPressed: _getUserAuth,
),
);
【讨论】:
非常感谢您的回答!虽然代码似乎是正确的,但对我来说,该函数仍然返回 null 作为当前用户名。这在理论上应该是不可能的,因为我在配置为读取时需要身份验证的同一应用程序中使用 Firestore。你知道这可能是什么问题吗? 它对我来说工作得很好,也许告诉我你是如何接线的,我会尽力帮助以上是关于全局访问 Google 登录用户名的主要内容,如果未能解决你的问题,请参考以下文章
单流:通过 Google oAuth 登录用户并授予离线/服务器访问权限?