2016-07-24 73 views
1

我目前正在使用Firebase,以便用戶使用其Google帳戶登錄以訪問該應用。但是,關閉頁面/在新選項卡中打開頁面需要用戶再次登錄。有沒有辦法阻止用戶重新登錄?堅持使用Google登錄在Firebase上登錄?

這裏是我使用(從火力文檔的例子)

function firebaseLogin() { 
    firebase.auth().signInWithPopup(provider).then(function(result) { 
    var token = result.credential.accessToken; 
    var user = result.user; 
    document.getElementById('user-name').innerHTML = user.displayName; 
    document.getElementById('propic').src = user.photoURL; 
    addClass(login, 'hidden'); 
    removeClass(logout, 'hidden'); 
    var snackbarData = { 
     message: 'Login Successful', 
     timeout: 2000 
    }; 
    snackbarContainer.MaterialSnackbar.showSnackbar(snackbarData); 
    console.log(user); 
    reloadList(); 
    }).catch(function(error) { 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    var email = error.email; 
    var credential = error.credential; 
    var snackbarData = { 
     message: 'Login Unsuccessful', 
     timeout: 2000 
    }; 
    snackbarContainer.MaterialSnackbar.showSnackbar(snackbarData); 
    console.error(error); 
    }); 
} 
+0

沒有看到[重現最小代碼問題](http://stackoverflow.com/help/mcve),不可能說出爲什麼你的應用程序的行爲方式如此。 –

+0

請指定您正在使用的環境。另外,請確保您使用的是身份驗證狀態觀察者來檢查當前身份驗證狀態。在加載時同步檢查firebase.auth()。currentUser不會返回當前登錄的用戶(狀態確定是異步操作)。一些開發者犯了這個錯誤。 – bojeil

+0

啊,這是有道理的。當我回到這個項目時,我將切換到使用身份驗證狀態觀察器。至於環境,這是一個web項目,在瀏覽器(clientside)中只使用javascript。 – ROODAY

回答

0

登入碼我不知道這是否是做了官方的方式,但我最終節省了用戶的返回從localStorage中的firebase.auth().currentUser開始,然後檢查在文檔加載時是否可以在localStorage中找到用戶。如果找到用戶,我只需將firebase.auth()。currentUser設置爲等於localStorage中的用戶,並且所有內容都按預期工作。 (例如,如果沒有經過身份驗證的用戶,客戶端將無法調用數據庫,但以這種方式設置currentUser允許訪問數據庫。)

+0

我使用了與描述類似的方法,但是,我收到消息'錯誤:「currentUser」是隻讀的「 – kyleED

+0

嗯,我沒有遇到過這個問題,再次,我沒有再次測試這個應用程序,因爲第3名,或許Firebase發生了變化? – ROODAY