2016-10-10 126 views
2

使用以下Firebase電子郵件身份驗證代碼,您如何知道身份驗證是否成功?Firebase身份驗證JavaScript獲得成功

firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 

      if (errorCode === 'auth/wrong-password') { 
       alert('Wrong password.'); 
      } else { 
       alert(errorMessage);   
      } 

      console.log(error); 
     }); 

我明白,這是容易實現的認證是否是不成功的,但是,我怎麼知道,如果用戶能夠用他們提供的憑證登錄?似乎沒有成爲一個「成功」的登錄。我現在有一個登錄表單的回調,我想在成功登錄導航離開。

回答

4

獲取當前登錄的用戶


推薦的方式來獲得當前用戶是通過驗證對象上設置觀察員:

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // User is signed in. 
    } else { 
    // No user is signed in. 
    } 
}); 

文檔:https://firebase.google.com/docs/auth/web/manage-users

0

如果沒有被緩存,然後它瓦特一樣成功。

var isSuccessful = true 
firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) { 
     // Handle Errors here. 
     var isSuccessful = false 
     var errorCode = error.code; 
     var errorMessage = error.message; 

     if (errorCode === 'auth/wrong-password') { 
      alert('Wrong password.'); 
     } else { 
      alert(errorMessage);   
     } 

     console.log(error); 
    }) 
    finally { 
    if(isSuccessful) 
     //Success! 
    } 
11

這裏

@ ksav的回答firebaser顯示檢測的首選方法,當我們出了用戶的跡象。

爲了完整性我想表明檢測到這種第二種方式,這是直接回應signInWithEmailAndPassword

firebase.auth().signInWithEmailAndPassword(email, password).then(function(user) { 
    // user signed in 
}).catch(function(error) { 
    var errorCode = error.code; 
    var errorMessage = error.message; 

    if (errorCode === 'auth/wrong-password') { 
     alert('Wrong password.'); 
    } else { 
     alert(errorMessage);   
    } 
    console.log(error); 
}); 

當用戶在已簽署的then()將被調用

原因我們在文檔中不再強調這種方法,它會錯過許多情況。例如:

  • 當用戶重新加載頁面時,then()將不會被調用。 onAuthStateChanged()另一方面回調也會調用
  • 用戶得到退出(例如,如果他們的短期令牌不能被刷新),catch()將不會被調用。 onAuthStateChanged()另一方面回調也會調用

如果你想明確地迴應用戶主動登錄時,我的答案中的方法可能是有用的。但在大多數情況下,我們建議您在@ ksav的答案中使用這種方法。