0

我使用Firebase身份驗證編寫了一個程序,如果用戶未登錄,我希望將其重定向至Google SignIn頁面,但如果用戶登錄,則不會重定向。它會在Google登錄後返回到我的頁面,僅在幾秒鐘後重新導向SignIn。這裏是我的代碼:Firebase身份驗證無盡環路

$(document).ready(function() { 
var provider = new firebase.auth.GoogleAuthProvider(); 
var uid; 
var user = firebase.auth().currentUser; 
var xv = 0; 
var yv = 0; 
var xpos = 200; 
var ypos = 200; 
var changeRef = firebase.database().ref(); 
var keys = []; 

if (user != null) { 
uid = currentUser.uid; 
firebase.database().ref('users/' + uid).set({ 
xpos: xpos, 
ypos: ypos 
}); 
} else { 
firebase.auth().signInWithRedirect(provider); 
firebase.auth().getRedirectResult().then(function(result) { 
if (result.credential) { 
// This gives you a Google Access Token. You can use it to access the  Google API. 
var token = result.credential.accessToken; 
// ... 
} 
// The signed-in user info. 
user = result.user; 
}).catch(function(error) { 
// Handle Errors here. 
var errorCode = error.code; 
var errorMessage = error.message; 
// The email of the user's account used. 
var email = error.email; 
// The firebase.auth.AuthCredential type that was used. 
var credential = error.credential; 
// ... 
}); 
} 
var canvas = document.getElementById("canvas"); 
var processingInstance = new Processing(canvas, sketchProc); 

}); 
+0

如果您將問題縮小一點,您將會有更好的運氣。例如,這與Processing.js沒有任何關係。您還應該嘗試使用正確的縮進方式,以便您的代碼更易於閱讀。 –

+0

我其實只是修復它,但你是對的。我放了processing.js標籤,因爲它在我的完整代碼中,但我沒有包含該部分。我不確定如何在縮進時將文本標記爲代碼;它不只有4個空格嗎?感謝您的提示! –

+0

如果你找出了問題的答案,你可能想發佈一個答案或只是刪除問題。但是爲了將來的參考,你可以肯定地在代碼塊中包含縮進。只需粘貼整個(正確縮進)代碼塊,然後突出顯示它並按代碼按鈕。這將爲每行添加4個空格,並且您的原始格式將被保留。 –

回答

1

當用戶登錄後,您並行調用兩個signInWithRedirect和getRedirectResult,這就是爲什麼你是停留在一個無限循環:

} else { 
    firebase.auth().signInWithRedirect(provider); 
    firebase.auth().getRedirectResult().then(function(result) { 

您可以附加signInWithRedirect單擊或從該塊中拉出(用戶未登錄)塊。