1

我一直在使用火力地堡的認證項目。當我登錄到我的項目時,有時firebase.auth().currentUser方法返回來自其他用戶的信息。有時候我會從當前的實際用戶那裏獲得信息,有時候會從之前登錄的用戶那裏獲得信息 - 發生這種情況時,糾正問題併爲正確用戶獲取數據的唯一方法是註銷並重新登錄。火力點 - 火力地堡當前用戶不是存儲在正確的用戶

我的登錄方法:

onLoginClick =() => { 
firebase.auth().signInWithEmailAndPassword(this.state.email.trim(), this.state.password.trim()) 
    .then((user) => { 
     //Some redirects depending on my users role 
    }) 
    .catch((error) => { 
     console.log(error, error.message); 
     if (error.code == "auth/user-not-found" || error.code == "auth/wrong-password") { 
      //Handle error 
     } 
    }); 

}

我的退出方法:

onLogoutClick =() => { 
    firebase.auth().signOut().then(function() { 
     this.props.history.replace("/") 
    }).catch(function (error) { 
     console.log(error); 
    }); 
} 

他們是非常標準的,但好像我做錯了什麼。我試着在註銷方法上清除sessionStoragelocalStorage,但這沒有幫助。

UPDATE:

我一些建議,試圖像做:

firebase.auth().signOut().then(() => { 
    firebase.auth().signInWithEmailAndPassword(email, password).then((user) => { 
     //My redirects and everything 
    }) 
}) 

但是,這是行不通的。

另外,我注意到,當我登錄並使用錯誤的憑據,在sessionStorage的獲取與用戶先前簽署的項目,即使我籤他。

+1

之前您登錄檢查,如果當前用戶是零。如果它沒有呼叫您的註銷功能,請將用戶簽入。最有可能發生這種情況的原因是,舊用戶仍然登錄。您如何退出應用程序?用戶是否保持登錄狀態? – DoesData

+0

@DoesData當我註銷用戶它;將我的應用重定向到主屏幕,所有登錄的用戶選項消失,我檢查了開發者控制檯,localStorage好像沒有當前用戶密鑰。但是,當我再次登錄時,即使我之前檢查過,有時也會得到錯誤的信息。 –

回答

0

我敢肯定,新的登錄會話初始化過程中,直至完成,currentUser尚未更新;當傳入這些方法時,使用user參數。因爲登錄依然是進行,現在還沒有一個currentUser,所以它傳遞通過user參數正在進行的用戶。 (我認爲這意味着很可能,這將是null第一次有人登錄,這將是前一後,除非它是由一些代碼在註銷清除。)

使用user參數時,它是例如在onAuthStateChanged處理程序中提供。請參見第一個示例here和藍色框中加星號的音符,使其位於同一頁面的下方。

+0

我現在用的是'firebase.auth()。currentUser'在下一屏,登錄爲全成後只能被訪問,並已完成 –

+0

的問題和代碼摘錄實際上並沒有說明如何'正在使用currentUser' (它根本沒有出現),所以我只能根據這個領域的常見問題進行推測。是否可以在任何地方提供更完整的代碼示例?你能用一個相當簡單的例子代碼重現這個問題嗎?我想最後一個問題是,如果你直接使用'firebase.auth()。currentUser'(或者通過變量等來保存它),或者如果這只是簡化/僞代碼,你正在做的更復雜碼。 –

+0

登錄後,我重定向到另一個組件(我正在使用ReactJS),其中我需要查詢用戶節點以檢索有關用戶的一些信息。我試圖做的查詢的一個例子是'firebase.database()。ref('notifications/pending /'+ firebase.auth()。currentUser.uid +'/'+ key) .once('value ') 。然後(通知=> { //設置通知的數量 });' –