簡體   English   中英

Firebase onAuthStateChanged無法在登錄時觸發

[英]Firebase onAuthStateChanged not firing on login

我有了Firebase身份驗證,可以工作到可以創建用戶並登錄和注銷用戶的程度。

我需要確保再做幾件事:

  • 檢測登錄/注銷狀態更改並基於此執行一些操作
  • 獲取登錄時的用戶ID,以便將其推送到Firebase數據庫

不幸的是,我的onAuthStateChanged方法似乎不起作用。 另外,我無法獲取user.uid-我收到未定義用戶的錯誤。 這是我的代碼:

 <!DOCTYPE html> <html lang="en-us"> <head> <meta charset="UTF-8"> <title>Firebase Auth Test</title> <!-- Firebase JavaScript Link --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase.js"></script> <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-auth.js"></script> <script src="https://www.gstatic.com/firebasejs/4.12.1/firebase-database.js"></script> </head> <body> <!-- JQuery --> <!-- ================================================================================== --> <script> $(document).ready(function () { // Initialize Firebase var config = { apiKey: "AIzaSyC0rCQY0jzdWe5AhcQpvIuKMr9XbnRWDsk", authDomain: "project1-e7460.firebaseapp.com", databaseURL: "https://project1-e7460.firebaseio.com", projectId: "project1-e7460", storageBucket: "project1-e7460.appspot.com", messagingSenderId: "87795057294" }; firebase.initializeApp(config); // Get a reference to the database service var database = firebase.database(); $("#signup").on("click", function () { event.preventDefault(); var email = $("#email").val().trim(); var password = $("#pass").val().trim(); console.log('trying to create!'); firebase.auth().createUserWithEmailAndPassword(email, password).catch(function (error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // ... }); }); $("#refset").on("click", function () { event.preventDefault(); console.log('ref set!'); firebase.database().ref().set({ username: "name", email: "email" }); }); $("#login").on("click", function () { event.preventDefault(); var email = $("#email").val().trim(); var password = $("#pass").val().trim(); console.log('trying to log in!'); firebase.auth().signInWithEmailAndPassword(email, password).catch(function (error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // ... }).then(function(user) { var user = firebase.auth().currentUser; }); }); $("#logout").on("click", function () { event.preventDefault(); console.log('trying Sign out in!'); firebase.auth().signOut().then(function () { console.log('signed out!'); // Sign-out successful. }).catch(function (error) { // An error happened. }); }); firebase.auth().onAuthStateChanged(function (user) { var user = firebase.auth().currentUser; if (user) { console.log('signed in!'); // User is signed in. } else { // No user is signed in. console.log('not signed in'); } }); }); </script> <br> <br> <br> <input id="email" placeholder="email" type="email"> <input id="pass" placeholder="pass" type="password"> <button id="signup" type="submit">Signup</button> <button id="login" type="submit">Log in</button> <button id="logout" type="submit">Log Out</button> <button id="refset" type="submit">Refset</button> </body> </html> 

您無需從觀察者函數覆蓋用戶,因此將其更改為(因此,當用戶在數據庫存儲的if和uid中登錄時,您將獲得事件):

firebase.auth().onAuthStateChanged(function(user) {
    //var user = firebase.auth().currentUser;
    if (user) {
        console.log('signed in!');
        console.log(user.uid);
        // User is signed in, call db storage function here
    } else {
        // No user is signed in.
        console.log('not signed in');
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM