如何从Flutter中的Firebase获取当前用户ID

问题描述 投票:1回答:4

我正在尝试这个 -

final Future<FirebaseUser> user = auth.currentUser();

但问题是,不是通过“userid”制作文档,而是制作一个名为的文档 -

Instance of 'Future<FirebaseUser>'

这就是我现在的文档名称,但我想特别指出它是用户标识。

我该怎么办?

firebase dart firebase-authentication flutter
4个回答
6
投票

uid是FirebaseUser对象的属性。由于auth.currentUser()返回一个future,你必须等待才能得到这样的用户对象:

void inputData() async {
    final FirebaseUser user = await auth.currentUser();
    final uid = user.uid
    // here you write the codes to input the data into firestore
  }

1
投票

您需要等待异步操作完成。

final FirebaseUser user = awit auth.currentUser();
final userid = user.uid

或者您可以使用then样式语法:

final FirebaseUser user = auth.currentUser().then((FirebaseUser user) {
  final userid = user.uid;
  // rest of the code
});

0
投票

如果您使用Google登录,则会获得此用户信息。

final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = new GoogleSignIn();
void initState(){
super.initState();
 firebaseAuth.onAuthStateChanged
        .firstWhere((user) => user != null)
        .then((user) {
      String user_Name = user.displayName;
      String image_Url = user.photoUrl;
      String email_Id = user.email;
      String user_Uuid = user.uid; // etc
      }
       // Give the navigation animations, etc, some time to finish
    new Future.delayed(new Duration(seconds: 2))
        .then((_) => signInWithGoogle());
        }

     Future<FirebaseUser> signInWithGoogle() async {
  // Attempt to get the currently authenticated user
  GoogleSignInAccount currentUser = _googleSignIn.currentUser;
  if (currentUser == null) {
    // Attempt to sign in without user interaction
    currentUser = await _googleSignIn.signInSilently();
  }
  if (currentUser == null) {
    // Force the user to interactively sign in
    currentUser = await _googleSignIn.signIn();
  }

  final GoogleSignInAuthentication googleAuth =
      await currentUser.authentication;

  // Authenticate with firebase
  final FirebaseUser user = await firebaseAuth.signInWithGoogle(
    idToken: googleAuth.idToken,
    accessToken: googleAuth.accessToken,
  );

  assert(user != null);
  assert(!user.isAnonymous);

  return user;
}

0
投票

这是另一种解决方法:

Future<String> inputData() async {
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final String uid = user.uid.toString();
  return uid;
  }

它将uid作为String返回

© www.soinside.com 2019 - 2024. All rights reserved.