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

时间:2019-01-02 03:13:43

标签: firebase dart firebase-authentication flutter

我正在尝试-

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

但是问题在于,不是通过“ userid”创建文档,而是通过-

名称创建文档
Instance of 'Future<FirebaseUser>'

从字面上看,这是我现在的文档名称,但是我想专门使其成为用户ID。

我该怎么办?

8 个答案:

答案 0 :(得分:5)

uid是FirebaseUser对象的属性。由于auth.currentUser()返回一个future,因此必须等待才能获得如下用户对象:

Class c1=new Class("className1");
c1.addStudent(new Student("StudentNAme1"));
c1.addStudent(new Student("StudentNAme2"));
c1.addStudent(new Student("StudentNAme3"));
classRepository.save(c1);

答案 1 :(得分:3)

final FirebaseAuth _auth = FirebaseAuth.instance;
getCurrentUser() async {
    final FirebaseUser user = await _auth.currentUser();
    final uid = user.uid;
    // Similarly we can get email as well
    //final uemail = user.email;
    print(uid);
    //print(uemail);
  }

调用函数getCurrentUser以获取结果。例如,我使用了一个按钮:

RaisedButton(
              onPressed: getCurrentUser,
              child: Text('Details'),
            ),

答案 2 :(得分: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
});

答案 3 :(得分:1)

你也可以试试这个。

"{\"error\":{\"code\":\"ErrorInvalidUser\",\"message\":\"The requested user 'foobar@private.com' is invalid.\"}}"

现在只需在您的代码中调用 currentUser() { final User user = _firebaseAuth.currentUser; final uid = user.uid.toString(); return uid; } ,它就会返回当前登录用户的 uid。

currentUser()

答案 4 :(得分:0)

如果您使用Google登录功能,则会获得该用户的信息。

extend(config, ctx) {
  // Run ESLint on save
  if (ctx.isDev && ctx.isClient) {
    config.module.rules.push({
      enforce: 'pre',
      test: /\.(js|vue)$/,
      loader: 'eslint-loader',
      exclude: /(node_modules)/
    })
  }
}

答案 5 :(得分:0)

这是另一种解决方法:

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

它返回uid作为字符串

答案 6 :(得分:0)

正常执行将始终返回

Instance of 'Future<FirebaseUser>'

尝试使用.then,如下所示

您的authservice类中的第一个Create函数

Future<String> getCurrentUID() async{
    final FirebaseUser user = await _auth.currentUser();
    final String uid = user.uid;
    return uid;
  }

然后在您拥有此ID的位置调用此函数,如下所示:

Widget build(BuildContext context) {
    void getid(String foo) {
      userID = foo;
    }

    AuthService().getCurrentUID().then((value) => getid(value));

    return Scaffold(
      ...
    );
}

这是获取ID的最便捷方法 您还可以获得电子邮件和手机号码。这样。

答案 7 :(得分:0)

您可以在 flutter 小部件之前将其添加到全局状态中。

final FirebaseAuth auth = FirebaseAuth.instance;
final User user = auth.currentUser;
final myUid = user.uid;

它将使 myUid 可用于这种情况。