簡體   English   中英

Flutter - firebase_auth updateProfile 方法不起作用

[英]Flutter - firebase_auth updateProfile method is not working

我正在使用 Flutter 和 Firebase 創建應用程序。 我有一些奇怪的問題。 我正在創建身份驗證並且它工作正常但是當我嘗試將一些集合添加到我的 Firestore 數據庫時,displayName 的記錄設置為 null。

Future<FirebaseUser> createUser(email, password, displayName) async {
    final FirebaseUser user = await _auth.createUserWithEmailAndPassword(
        email: email, password: password);

    UserUpdateInfo info = new UserUpdateInfo();
    info.displayName = displayName;
    _auth.updateProfile(info);

    Firestore.instance.collection('users').document().setData({
      'name': user.displayName,
      'uid': user.uid,
      'email': user.email,
      'isEmailVerified': user.isEmailVerified,
      'photoUrl': user.photoUrl,
    });

    return user;
  } 

這是創建用戶的 Future 類。

void _handleSubmitted() {
    userAuth
        .createUser(
        emailController.text, passwordController.text, nameController.text)
        .then((onValue) {
      print("Sign Up button clicked: $onValue");

    });
  }

單擊注冊按鈕時處理此方法。

和收藏看起來像這張照片。

收藏

如果我沒記錯的話,當您調用updateProfile時,本地用戶配置文件不會立即更新。 這意味着您應該只將本地值寫入數據庫(最簡單)或強制重新加載配置文件(最安全)。

寫入本地值

如前所述,這是最簡單的方法:

Firestore.instance.collection('users').document().setData({
  'name': displayName,
  'uid': user.uid,
  'email': user.email,
  'isEmailVerified': user.isEmailVerified, // will also be false
  'photoUrl': user.photoUrl, // will always be null
});

請注意, isEmailVerified新創建的電子郵件+密碼帳戶, isEmailVerified將始終為 false,而photoUrl將始終為null

強制重新加載配置文件

您可以通過調用FirebaseUser.reload()強制重新加載用戶數據:

await _auth.updateProfile(info);
await user.reload();
user = _auth.getCurrentUser();

要更新用戶顯示名稱和照片網址,這肯定會有所幫助。

  FirebaseUser user = await FirebaseAuth.instance.currentUser();

  UserUpdateInfo userUpdateInfo = new UserUpdateInfo();
  userUpdateInfo.displayName = name;
  userUpdateInfo.photoUrl = url;

  user.updateProfile(userUpdateInfo);

Firebase Auth 的工作方式很不方便,他們說現在不會改變,所以我制作了一個包來解決這個問題,在這里獲取: firebase_user_stream

在自述文件中,我解釋了問題以及軟件包如何修復它們,還有示例等,盡情享受吧!

編輯(2020 年 7 月):

Flutter 的 Firebase 身份驗證現在有一個userChanges流:

每當身份驗證狀態、id 令牌或配置文件發生更改時都會觸發。 本質上,這是一種獲取當前無狀態功能(例如 updateProfile)的實時更改的方法。

我也嘗試了一切,但是,這對我有用! 只需像代碼中那樣調用 FirebaseAuth.instance 兩次即可。

 FirebaseUser currentUser = await _auth.currentUser(); await currentUser.reload(); currentUser = await _auth.currentUser(); print("Current User ${currentUser.displayName}"); print("Current User ${currentUser.photoUrl}");

希望這對你有幫助!

暫無
暫無

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

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