2017-02-06 8 views
1

Я использую аутентификацию на основе пароля Firebase в моем login.html. У меня есть 2 текстовых поля и 3 кнопки.Firebase OnAuthStateChanged функция не возвращает ничего

Я использую firebase.OnAuthStateChanged, чтобы узнать, был ли пользователь зарегистрирован или вышел из системы. Когда пользователь входит в систему, текстовое поле пароля и кнопка входа в систему должны быть скрыты, поэтому я использую для этого display : none;. И когда пользователь выйдет из системы, кнопка выхода из системы должна быть скрыта.


кнопки работают отлично, но реальная проблема заключается в if elseif заявлении.

Ниже приведен мой код JavaScript.

P.S: Не стесняйтесь использовать конфигурацию Firebase для тестирования. Или использовать этот логин:


// Initialize Firebase 
    var config = { 
    apiKey: "AIzaSyDjYqNKbZaom0jplOusloWlr5mOhW2WbgQ", 
    authDomain: "awes-e3043.firebaseapp.com", 
    databaseURL: "https://awes-e3043.firebaseio.com", 
    storageBucket: "awes-e3043.appspot.com", 
    messagingSenderId: "191054424051" 
    }; 
    firebase.initializeApp(config); 
// SignIn 
$("button#in").click(function(){ 
var email = document.getElementById('logemail'); 
var password = document.getElementById('logpassword'); 
firebase.auth().signInWithEmailAndPassword(email.value, password.value).catch(function(error) { 
    console.log(error.code); 
    console.log(error.message); 
}).then(function(){ 
    location.reload(); 
}); 
}); 
// SignOut 
$("button#out").click(function(){ 
firebase.auth().signOut().then(function() { 
    console.log("Logged out!") 
    location.reload(); 
}, function(error) { 
    console.log(error.code); 
    console.log(error.message); 
}); 
}); 

    $(document).ready(function(){ 
function usigned(){ 
firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    return true; 
    } else { 
    return false; 
    } 
}); } 
if (usigned() == true) { 
    $("#hlogp").css("display", "none"); 
    $("button#in").css("display", "none"); 
    $("button#out").css("display", "inline-block") 
}else if(usigned() == false) { 
    $("button#out").css("display", "none"); 
    $("#hlogp").css("display", "block"); 
    $("button#in").css("display", "block"); 
} 
}); 

ответ

0

Как и большинство firebase звонков, onAuthStateChanged() работает асинхронно, так что вам нужно для установления его с обратным вызовом:

function usigned(bool) { 
    if (bool) { 
    $("#hlogp").css("display", "none"); 
    $("button#in").css("display", "none"); 
    $("button#out").css("display", "inline-block"); 
    } else { 
    $("button#out").css("display", "none"); 
    $("#hlogp").css("display", "block"); 
    $("button#in").css("display", "block"); 
    } 
} 

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    usigned(true); 
    } else { 
    usigned(false); 
    } 
}); 

В качестве альтернативы вы можете просто поместить введенный() код inline ...

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    $("#hlogp").css("display", "none"); 
    $("button#in").css("display", "none"); 
    $("button#out").css("display", "inline-block") 
    } else { 
    $("button#out").css("display", "none"); 
    $("#hlogp").css("display", "block"); 
    $("button#in").css("display", "block"); 
    } 
}); 
+0

спасибо, это очень помогает мне. –