android 如何等待FirebaseAuth完成初始化?

u7up0aaq  于 2023-10-14  发布在  Android
关注(0)|答案(7)|浏览(133)

将Firebase身份验证集成到我的应用程序中。一切似乎都很好,直到我注意到我打开应用程序的问题,它向我显示登录屏幕,即使已经有用户登录。
退出应用程序并再次启动它解决了这个问题(应用程序不再要求用户再次登录),尽管它为用户提供了非常糟糕的体验。
我已经阅读了文档,很明显,如果auth没有完成初始化,调用FirebaseAuth.getInstance().getCurrentUser()可能会返回null。我假设这就是问题发生的原因。所以我想知道是否有一种方法可以等待FirebaseAuth完成初始化,然后才能调用getCurrentUser()?

pxy2qtax

pxy2qtax1#

使用现代API,只需等待auth状态更改:

firebase.auth().onAuthStateChanged(user => init_your_app);
o2g1uqev

o2g1uqev2#

你可以创建一个返回promise的函数,并在需要的地方等待:

function getCurrentUser(auth) {
  return new Promise((resolve, reject) => {
     const unsubscribe = auth.onAuthStateChanged(user => {
        unsubscribe();
        resolve(user);
     }, reject);
  });
}

检查这个-https://github.com/firebase/firebase-js-sdk/issues/462

bwleehnv

bwleehnv3#

对于问同样问题的React用户:
react-firebase-hooks有一个名为useAuthState的钩子,可以证明它有助于检查firebase auth的状态。下面是一个我认为非常常见的用例。

import {useAuthState} from "react-firebase-hooks/auth";
import React from "react";

export default function AllowIfAuth() {
    const [user, loading, error] = useAuthState(auth);
    if (loading) {
        return <div> Loading... </div>;
    } else if (user) {
        return <div> Some Content </div>;
    } else if (error) {
        return <div>There was an authentication error.</div>;
    } else {
        return <LoginPage/>;
    }
}
k7fdbhmy

k7fdbhmy4#

无法相信我必须这样做(因为没有官方的API由谷歌)。我必须使用一个额外的布尔值...

let isAuthReady = false

firebase.auth().onAuthStateChanged((user) => {
  store.commit('setUser', user)

  if (!isAuthReady) {
    isAuthReady = true
    init()
  }
})
mwngjboj

mwngjboj5#

您需要一个侦听器来告诉您身份验证何时完成,此链接可能会帮助您:FirebaseAuth.AuthStateListener

ibps3vxo

ibps3vxo6#

您可以调用getCurrentUser()来了解此时此刻是否知道用户已登录。如果需要在用户登录或注销时触发一些代码,则需要注册一个侦听器,以便在发生更改时得到通知。有一个方法addAuthStatement()将在该更改时触发。一定要阅读javadoc,以准确理解它将在什么情况下触发。在您添加的AuthStateListener旁边,您将能够调用getCurrentUser()来了解用户是否登录。

t98cgbkg

t98cgbkg7#

现在我们有Auth.authStateReady()用于JS

auth.authStateReady()
                .then(() =>
                    onAuthStateChanged(auth, user => {
                       // logic...
                    })
                )

https://firebase.google.com/docs/reference/js/auth.auth.md#authauthstateready
不确定Java等价物

相关问题