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单击或从该块中拉出(用户未登录)块。