全局访问 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 有一个名为 currentUserasync 方法,可用于访问当前经过身份验证的用户。

虚拟示例:

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 登录用户名的主要内容,如果未能解决你的问题,请参考以下文章

Yii登录验证和全局访问用户ID

单流:通过 Google oAuth 登录用户并授予离线/服务器访问权限?

AWS身份池Google登录

未为 Google OAUTH 登录配置访问权限

Rails 6 API + React + Google login:登录后如何授权用户访问某些服务器路由?

用户从 Android 中的 Gmail 登录后如何获取访问令牌?