簡體   English   中英

如何從Firebase身份驗證獲取用戶ID作為字符串?

[英]How to get user id from firebase auth as string?

我正在嘗試使用經過身份驗證的用戶ID作為文檔ID將數據插入到Firestore中,但是我從參數中得到了null。

請看一下我的腳本。

void didChangeDependencies() {
  uid = '';
  super.didChangeDependencies();
}

Future _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  return await auth.getCurrentUser().then((user) => _uid = user.uid);
}

_validateAndSubmit() async {
  setState(() {
    _errorMessage = '';
    _isLoading = true;
  });

  if (_validateAndSave()) {
    try {
      _fetchUID();
      await Report.create(_uid, _suspectName, _plateNumber, _civilizationId,
          _drivingLicenseId, _clause, _description);
      return Navigator.of(context).pop();
    } catch (e) {
      setState(() {
        _isLoading = false;
        _errorMessage = e.message;
      });
      print(_errorMessage);
      throw Exception(e);
    }
  }
}

在下面的此方法中,您可以看到我已經嘗試設置_uid ,但是仍然無法獲得_uid值。

Future _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  return await auth.getCurrentUser().then((user) => _uid = user.uid);
}

這就是getCurrentUser()方法的樣子。

Future<FirebaseUser> getCurrentUser() async {
  FirebaseUser user = await _firebaseAuth.currentUser();
  return user;
}

我做錯了嗎?

首先,將Future.then語法和async await語法混合在一起。
您可能應該這樣寫方法:

void _fetchUID() async {
  var auth = AuthProvider.of(context).auth;
  _uid = (await auth.getCurrentUser()).uid;
}

如果_uid仍然是null打完電話后對您_fetchUID這種方式,那么你根本就沒有簽署,這意味着沒有FirebaseUser ,你首先需要登錄。

_validateAndSubmit方法中,您還首先需要等待 _fetchUID調用,否則它將在分配值之前通過_uid

...
try {
  await _fetchUID();
  await Report.create(_uid, ..);
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM