![](/img/trans.png)
[英]I don't understand why firebase.auth().signInWithEmailAndPassword(email, password) does not work
[英]Why firebase signInWithEmailAndPassword doesn't trigger onAuthChange?
當用戶登錄時,我觸發了以下功能:
const auth = firebase.auth();
export const signIn = ( email, password ) => (
auth.signInWithEmailAndPassword( email, password )
.catch(e => e ? console.log(e) : console.log(auth.currentUser))
);
如果我輸入了不正確的詳細信息,則錯誤將記錄到控制台中,但是如果詳細信息正確,則什么也不會發生。
當我在devtools中檢查網絡數據時,請求將返回應有的所有數據,但是在應用程序內部, auth.currentUser
是未定義的(登錄后也將進行檢查)。
而且因為不太令人驚訝,
export const getUser = () => (
async dispatch => (
auth.onAuthStateChanged(user => {
const { uid } = user = {};
console.log(user)
if (uid) {
console.log(uid)
dispatch(
setUserId(
uid
)
)
} else {
console.log("nologin")
}
})
)
);
剛開始時,在應用程序加載時使用undefined
和nologin
觸發。 在Firebase控制台內部,啟用了電子郵件和密碼身份驗證,並且用戶有效。 我知道它應該工作,因為我以相同的方式通過Firebase進行了許多身份驗證過程,因此,如果您遇到相同的問題並解決了問題,那么我無法提供更多信息,請告訴我。
是的,我認為這與Firebase設計的異步特性有關。 因此signInWithEmail ...可以工作,但是不會立即反映出currentUser對象的更改。 而是使用事件onAuthStateChanged執行與currentUser相關的任何代碼。 該過程將是:
注冊onAuthStateChanged事件,並在其中檢測到currentUser == null,此事件將始終在第一個定義中以null用戶被調用,因此通過在其中放入if可以檢測何時處理實際登錄。
添加signIn函數,但不要在此處使用currentuser在回調上執行任何操作,而是將相關代碼移動到onAuthStageChanged。
另外,不是100%確保必須將事件包裝在模塊中並導出,還是應該這樣做。 在做網絡應用程序時,每個頁面都應該是無狀態且獨立的,因此每個頁面都應該有自己的腳本代碼來檢查auth事件並做適當的事情。
我是那樣做的,到目前為止一直都在工作。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.