如何在`signInWithRedirect()`之后检测`getRedirectResult()`状态

And*_*See 9 firebase-authentication

我正在使用 signInWithRedirect(provider), 并getRedirectResult()在从提供商(即 Google)登录后获取结果。

我面临的问题是,getRedirectResult()重定向后似乎需要很长时间(可能需要 3-5 秒)才能解决,因此,在 Google 重定向后,它仍然显示默认视图(即登录表单),而等待承诺解决,这不是很好的体验。

有没有办法检测用户是否从 Google 登录重定向,以便我可以在等待getRedirectResult()解决时加载微调器?

我试过document.referrer没有运气。

boj*_*eil 7

getRedirectResult()当没有待处理的重定向时,应该快速解决(不到一秒)。如果有待处理的重定向,您应该在解决之前显示一些微调器。顺便说一句,您也可以用来onAuthStateChanged检测登录状态,无论是否有挂起的重定向。

这是如何显示微调器的简单示例。当重定向操作正在处理时。

// On load, show spinner.
showSpinner();
firebase.auth().getRedirectResult().then(result => {
  // If user just signed in or already signed in, hide spinner.
  if (result.user || firebase.auth().currentUser) {
    hideSpinner();
  } else {
    hideSpinner();
    showSignInForm();
  }
});
Run Code Online (Sandbox Code Playgroud)

您也可以自己跟踪。

// Before starting sign in with redirect.
window.sessionStorage.setItem('pending', 1);
firebase.auth().signInWithRedirect(authProvider)...

// On return.
if (window.sessionStorage.getItem('pending')) {
  window.sessionStorage.removeItem('pending');
  showSpinner();
  firebase.auth().getRedirectResult().then(result => {
    hideSpinner();
  });
}
Run Code Online (Sandbox Code Playgroud)