ログインしたユーザーがFlutterFirebaseを使用すると、サインイン後にNULLのcurrentUserが返されます

Dec 10 2020

signInWithEmailAndPassword()APIを使用してFirebaseで認証すると、有効な「現在の」ユーザーを取得できません。

  1. ユーザー名とパスワードを使用してアプリケーションにサインインします
auth.signInWithEmailAndPassword()
  1. サインインすると、ユーザーはホームページに移動します

  2. ユーザーのUIDを取得しようとしましたが、有効なユーザーが返されません。呼び出しは、非同期関数で次のように行われます。

currentUser = await auth.currentUser();

currentUserがnullです。

これを引き起こしている可能性のあるアイデアはありますか?

回答

1 Keita Dec 10 2020 at 00:08

返されたFirebaseUserをリロードするとどうなりますか?これは私のために働いた。

const User currentUser = await auth.currentUser;
if (currentUser != null) {
  await currentUser.reload();
}

明らかに単純化されたコード。注:auth.currentUser()はauth.currentUserになりました。

これは重複している可能性があります。FlutterFirebaseAuthenticationcurrentUser()はnullを返します。

1 DougStevenson Dec 10 2020 at 00:10

ドキュメントでは、ユーザーがサインインしてユーザーオブジェクトが使用可能になったときに、認証状態オブザーバーを使用してコールバックを取得することを推奨しています。そのリンクされたドキュメントに示されているように:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

に依存しないことを強くお勧めしcurrentUserます。これは、現時点でしか確認できないためです。オブザーバーは、ユーザーオブジェクトが使用可能になったときに通知することが保証されています。

HarshSingh Dec 19 2020 at 03:10

ユーザーを取得した後、参照用に問題コードを解決したら、それをリロードするだけです:D

final FirebaseAuth _auth = FirebaseAuth.instance;
  User currentuser;
  bool isloggedin= false;
  getUser() async{

    User user =  _auth.currentUser;
    await user?.reload();
    user =  _auth.currentUser;

    if(user !=null)
    {
      setState(() {
        this.currentuser = user;
        this.isloggedin=true;
      });
    }
  }